Intent是什么?
-
Android中提供了Intent机制来协助应用间的交互与通讯,或者采用更准确的说法是,Intent不仅可用于应用程序之间,也可用于应用程序内部的activity, service和broadcast receiver之间的交互。
-
Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应
-
activity、service和broadcast receiver之间是通过Intent进行通信
-
Intent在传递数据时是有大小限制,数据应该被限制在1MB之内(1024KB)
Intent如何使用及传值:
1.Activity与Activity之间传值:
//发送的Activity
Intent intent = new Intent();
intent.setClass(context, B.class);
intent.putExtra("key","A》B页面");
startActivity(intent);
//接收的Activity
Intent intent = getIntent();
String key = intent.getStringExtra("key ");
补充Intent 可以传递数据类型:
Serializable 、charsequence、Parcelable、Bundle
基本数据类型(byte、boolean、char、short、int、float、long、double)、String、StringBuffer、StringBuilder类型
2.Activity向Fragment传值
//发送的
Fragment ft = new Fragment();
Bundle bundle = new Bundle();
bundle.putString("key","我来了");
ft.setArguments(bundle);
//接收 Fragment
Bundle bundle = getArguments();
String name = bundle.getString("key");
在上面常有的传递数据中,往往会发送传送大量数据,导致无法跳转,或者提示
com.xxx.op E/JavaBinder: !!! FAILED BINDER TRANSACTION !!! (parcel size = 1076164)
那么如何解决这个问题呢?以下是一些推荐的大数据传递的解决办法
-
使用文件共享的方式,将数据以文件的形式存储在sd卡
-
使用数据库,本地持久化存储
-
使用单例
-
使用Applcation,跟单例原理差不多
-
使用static
-
利用EventBus中的postSticky进行传递(我使用的)