android传递数据
Ⅰ Android Intent的作用,哪些类型的数据可以被传递
(1) 要激活一个新的Activity,或者让一个现有的Activity执行新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。这两个方法需要传入的Intent参数也称为Activity Action Intent(活动行为意图),根据Intent对象对目标Activity描述的不同,来启动与之相匹配的Activity或传递信息。
(2) 要启动一个新的服务,或者向一个已有的服务传递新的指令,调用Context.startService()方法或调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。
Intent一旦发出,Android都会准确找到相匹配的一个或多个Activity、Service或Broadcast-Receiver作为响应。所以,不同类型的Intent消息不会出现重叠:BroadcastIntent消息只会发送给BroadcastReceiver,而绝不可能发送给Activity或Service。由startActivity()传递的消息也只可能发送给Activity,由startService()传递的Intent只可能发送给Service。
向下一个Activity传递数据(使用Bundle和Intent.putExtras)
Intent it = new Intent(Activity1.this, Activity2.class);
Bundle bundle=new Intent();
bundle.putString("name", "This is from MainActivity!");
it.putExtras("bd",bundle); // it.putExtra(“test”, "shuju”);
startActivity(it); // startActivityForResult(it,REQUEST_CODE);
Ⅱ 如何将Android手机上的数据转移到iPhone上面
在iPhone完成新iOS设置进程中,是有多个功能区进行数据转移的。但是设备一旦激活后,就只能进行恢复出厂设置,清除设备所有数据,再次进行新iOS设置。再次进行新iOS设置进程中,可借助【转移到 iOS】APP。1、在安卓手机端,确保WiFi已开启;2、将 iOS 设备和安卓设备插入电源,避免因电量不足而造成传输中止的情况;3、确保 iOS 设备上有足够的储存空间来储存即将转移的内容,包括外部 Micro SD 卡上的内容;4、如果要转移Chrome 书签,请将安卓设备上的 Chrome 更新至最新版本;5、在数据转移过程中,注意将两台设备贴近放置,且不要移动设备。一、备份资料备份完成后,当安卓手机数据成功转移到iPhone后,再进行数据的还原操作即可。二、恢复出厂设置当iPhone进行数据备份后,点开【设置】-【通用】-【还原】,再点击【还原所有内容和设置】,按照手机界面提示依次进行确认操作即可。三、转移安卓数据到iOSiPhone还原后,进行新iOS设备的设置,直到出现【APP与数据】功能界面。即可开始Android设备数据到iOS设备的转移操作。具体操作如下几个步骤:步骤1:点击【从安卓设备转移数据】,按照提示确认操作,点击继续,直到出现6位数代码。步骤2:在安卓手机端安装好【转移到 iOS】App。打开运行【转移到 iOS】App,点击【继续】,根据提示授权权限进行下一步,直到显示【输入代码】。步骤3:在安卓手机端输入代码,直到【传输数据】功能出现,再选择自己想要传输的数据类型,点击【下一步】,等待数据转移进度条走完即可。注:如果安卓设备显示您的互联网连接信号弱的警告,您可以忽略这条警告。完成数据转移后,可继续完成iPhone设置的设置流程,直到设备正常启动,再进行已备份数据的还原即可。Ⅲ 如何android多Activity间共享数据
其实有如下5种方式:
1.基于消息的通信机制 Intent ---boudle ,extra
数据类型有限,比如遇到不可序列化的数据Bitmap,InputStream, 或者LinkList链表等等数据类型就不太好用。
2. 利用static静态数据,public static成员变量;
3.基于外部存储的传输, File/Preference/ Sqlite ,如果要针对第三方应用需要Content Provider
4.基于IPC的通信机制context 与Service之间的传输,如Activity与Service之间的通信,定义AIDL接口文件。
5. 基于Application Context
这里面我觉得第五种方法更具普适性,在网上找了篇讲解得好的文章,原文如下:
在Android中使用Intent在两个Activity间传递数据时,只能是基本类型数据,或者是序列化对象。Intent是一种基于消息的进程内和进程间通信模型,当我们需要在我们应用程序内部,多个Activity间进行复杂数据对象共享交互时,使用Intent就显得很不方便。此时,我们就需要一种数据共享的机制来实现。当然,直接使用java语言中的静态变量是可以的,但在Android中有更为优雅的实现方式。
The more general problem you are encountering is how to save stateacross several Activities and all parts of your application. A staticvariable (for instance, a singleton) is a common Java way of achievingthis. I have found however, that a more elegant way in Android is toassociate your state with the Application context.
--如想在整个应用中使用,在java中一般是使用静态变量,而在android中有个更优雅的方式是使用Application context。
As you know, each Activity is also a Context, which is informationabout its execution environment in the broadest sense. Your applicationalso has a context, and Android guarantees that it will exist as asingle instance across your application.
--每个Activity 都是Context,其包含了其运行时的一些状态,android保证了其是single instance的。
The way to do this is to create your own subclass of android.app.Application,and then specify that class in the application tag in your manifest.Now Android will automatically create an instance of that class andmake it available for your entire application. You can access it fromany context using the Context.getApplicationContext() method (Activityalso provides a method getApplication() which has the exact sameeffect):
--方法是创建一个属于你自己的android.app.Application的子类,然后在manifest中申明一下这个类,这是android就为此建立一个全局可用的实例,你可以在其他任何地方使用Context.getApplicationContext()方法获取这个实例,进而获取其中的状态(变量)。
class MyApp extends Application { private String myState; public String getState(){ return myState; } public void setState(String s){ myState = s; } } class Blah extends Activity { @Override public void onCreate(Bundle b){ ... MyApp appState = ((MyApp)getApplicationContext()); String state = appState.getState(); ... } }
对于Application的生命周期,今天测试了一下,Application类型在该APP被install的时候就已经实例化了,并且onCreate也已经被调用了。
如果需要创建类型里面可能需要用到的对象的话,就可以在构造函数里面实现,但是如果需要将该类型bind Service或者registerReceiver等操作时,需要将这些操作放到onCreate中,否则会抛出异常。其原因主要是这个对象还没有创建完成,此时你用这个对象来bindservice必然会出现意想不到的情况,所以在使用时还需要注意。
Ⅳ android中两个activity怎么实现数据传输
操作步骤如下:
1、创建Intent对象,并配置参数,有那个activity跳转到哪个activity
Ⅳ android message传递数据到handler的问题
第燃败一种思想是推荐使仿旦用的,任何函数在调用的时候,涉及到传递参数,都会降低效率。根据message的源码setData(Bundle data)它的注释:
Sets a Bundle of arbitrary data values. Use arg1 and arg1 members as a lower cost way to send a few simple integer values, if you can.意思是说,尽量使用arg1和arg2传递整型数据,降低开销(lower cost)。因此你的第二种想法完全就是多此一举,因为Handler的设计思想就是通知主线程更备段扰新数据,用最小的开销去通知。
Ⅵ android两个activity之间怎么传递数据
Activity之间是没有办法直接传递数据的。Android的设计原则是,用Intent在不同的Activity和进程之间进行通信,但是通常来讲,Intent中只能存入基本数据类型和系统默认支持的比如Uri之类的。那么对于用户自己定义的数据结构是无法直接用Intent来传送的,如果想要通过Intent来传递自定义数据,可以让数据结构实现Parcelable接口,这样就可以把数据放入Intent。但是Intent的传送效率也不是很高,特别是当传递一些如Bitmap的大数据,用Intent传递超过500K的Bitmap,就会造成Framework层的Java Binder挂掉,结果就是传递不成功。
这点可以算成是Android的一个弊端,没有很好的解决方案。能做到的就是尽量设计的时候注意,尽量让Activity之间共享基本数据类型。
Android本身的应用中也深受其害,可以看到有很多应用程序的源代码中的主要的类在三千行以上的不在少数,比如Browser中的BrowserActivity有四千多行;Mms中的ComposeMessageActivity也有四千多行,等等。为什么一个类会如此之大,就是因为它们是程序的主页面,是业务的核心逻辑所在,里面也控制着很多的其他的数据结构,而又无法与另外的Activity共享,所以就只能在一个Activity里面做所的事情。