扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
最近要从 Service 端给 Client 端传递图片数据,之前的数据都是通过 aidl 传递:
创新互联成立于2013年,是专业互联网技术服务公司,拥有项目成都网站建设、成都做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元汕头做网站,已为上家服务,为汕头各地企业和个人服务,联系电话:18982081108
创建 Parcelable 文件
ImageData.java
test.aidl
运行报错:
这里导致 DeadObjectException 的原因主要是 binder 创建的 buffer 被占满了:
传输中如果数据大于 free_buffers ,则会抛出 DeadObjectException
socke 传输不受大小限制,但实现比较复杂
通过文件传输比较简单,但效率差,而且高版本会受到Android系统权限限制
将较大数据切割成较小的数据传输,此方法是兼顾效率,复杂度较好的方案
定义数据体:
切割数据方法:
将ImageData按顺序构建发送:
client接收:
binder 本身也是利用 mmap ,可以利用实现 mmap 的框架,比如 MMKV
如果传输的数据是 Bitmap ,还可以用 Bundle 的 putBinder 方案
定义 binder :
发送
接收:
1、原始数据类型:在Activity/Servier之间传递临时性的原始数据,可以使用Intent的putExtras方法来传递数据。若传递的数据需要长久保存,则使用SharedPreference类来完成。2、传递对象。当在Activity/Servier之间传递不需要长久保存的对象时,可以使用以下几种途径:(1)通过Application类,每个Android应用程序都有一个Application类。当你在程序的AndroidManifest.xml中给Application设定一个名字时,你的程序中就必须有一个Application的子类。这个Application子类会被Android自动实例化,并且是一个全家性的类,它的生命周期和程序的生命周期相同,你可以把一些全局性的对象保存在Application类中。Application类可以通过getApplication()获得。(2 )通过HashMap of WeakReferences传递对象。当一个Activity需要向另外一个Activity传递对象时,可以使用一个关键字把对象存在一个HashMap中,并把这个关键字通过Internt的Extras发给目标Activity,目标Activity接到该关键字后使用该关键字把对象从HashMap中取出。
用intent在activity之间传递数据,需要注意三个方法:
1.startActivityForResult(Intent intent, int requestCode)
2.setResult(int resultCode, Intent data)
3.onActivityResult(int requestCode, int resultCode, Intent data)
需要注意的是:
1.函数1在Activity_A里面调用,然后启动Activity_B(由intent参数决定启动哪个activity);然后Activity_B执行完了之后,在finish()函数里面调用函数2;此时返回Activity_A;最后在Activity_A里面系统自动调用已经重载的函数3,Activity_A可以从该函数的第三个参数data里面获得想要的数据。
2.函数1有两个参数,第二个参数确定请求码;
3.函数3有三个参数:第一个参数请求码,与函数1的第二个参数意义相同,用于确定是否是从Activity_B里获得的返回值;第二个参数是结果码,用于确定返回的结果是否可用;第三个参数是intent变量,用于传递数据。
1.在苹果手机上打开“传输到IOS”,选择“从安卓设备传输数据”。2.进入转账界面,点击继续,如下图。3.iPhone上出现一串代码。记住这串代码,如下图所示。4.在Android设备上开始传输到IOS,点击继续按钮,如下图所示。5.出现使用协议时,点击同意,如下图所示。6.进入代码查看界面,点击右上角的下一步,如下图所示。7.在iPhone上输入10位代码,开始传输选择的内容,比如照片,如下图所示。8.Android手机开始连接iPhone并传输数据。等待传输完成,然后继续iPhone设置,如下图所示。9.等待传输完成,继续iPhone设置,然后你就可以看到Android手机数据导入到Applephone了。
这个首先要看你在什么场景下做消息传递,咱要具体问题具体分析:
Activity与Activity,调用启动方法的时候传递即可
Activity与Fragment,使用Bundle传递;
Activity与Service,使用onBind进行消息传递
接口回调
BroadCast方式传递数据
EventBus方式传递数据
观察者模式传递数据
比较常用的是1、2、3、4;基本满足要求了,如果还无法达到要求酌情使用5、6、7;
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流