当前位置: 首页 > news >正文

专业做网站和小程序google搜索引擎入口

专业做网站和小程序,google搜索引擎入口,做图的模板下载网站有哪些,网站一般用什么语言学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为2478字,预计阅读6分钟 前言 Android的AIDL使用和异常报错都已经介绍过了,今天这篇还是在原来的Demo基础上加入几个AIDL的进阶使用方法。 】 AIDL进阶使用 微卡智享 in,out,inout的使…

学更好的别人,

做更好的自己。

——《微卡智享》

e4779c31e5bb17eb75b5540ca986230a.jpeg

本文长度为2478,预计阅读6分钟

前言

Android的AIDL使用和异常报错都已经介绍过了,今天这篇还是在原来的Demo基础上加入几个AIDL的进阶使用方法。

83980b3041623a9f09e87313c3a94fb1.png

AIDL进阶使用

4da1eb7715c927a7f2ef822dfd3db7a7.png

微卡智享

in,out,inout的使用

关于in,out,inout在AIDL的基础介绍中有提到过

AIDL中还有定向的Tag,包括了in、out、inout。其中 in 表示数据只能由客户端流向服务端, out 表示数据只能由服务端流向客户端,而 inout 则表示数据可在服务端与客户端之间双向流通。

Vaccae,公众号:微卡智享Android Aidl跨进程通讯的简单使用

根据字面意思可以很简单的理解,所以我们直接做一个函数实现inout的方法即可。

  1. 在服务端的Aidl文件中加入一个新的函数updateTestDatsList,输入的参数设置为inout

    72ecd805f35133ca0de3778dabbdc77c.png

  2. Build后在Service的object : ITestDataAidlInterface.Stub()里面写入实现,这里我们先将传入的list里面再自定义加入一条,然后插入到Service缓存的List列表中,再将传入的listdata清空后,把Service缓存中的所有数据都插入传入的listdata

    dcdbd58987528bcc6fe7edd541ce5138.png

  3. 因为是跨进程,所以客户端需要将修改后的Aidl复制过来替换原来的,然后在MainActivity中写入实现调用

    00eb5ad582a250b3ed07bee217feb03d.png

    53651c7c56937029577f70e13e51b47e.png

    运行效果

    d3b2228e4e517630bfcfa815b9dc8c47.png

14c92d184347825876b30f605571d94b.png

0e93f54bf644defebddf6a56b3bb9006.png

点击更新列表后的对比,可以看到,使用inout参数,传入的list最后也已经修改完成。

AIDL使用Bundle传递多个数据

AIDL可以使用Bundle类封装通讯数据,用于传递一些复杂的对象或者多个对象。

Bundle类是一个键值对的容器,它可以存储不同类型的数据,并且实现了Parcelable接口,所以可以在进程间传输。

  • Service的AIDL接口加入新的函数transBundle,传入的参数就是Bundle

5ec2f32a5b1504e176b7ed3a1020c8c9.png

  • 在Service加入接口实现,这里我们测试里面加入一个Float,一个Int,和一个List数据,将原来的价格和数量都统一改为一样的数据后,再将传入的list加入到后面,最后展现出来,

4323edfbc7984e8bc77b95187d1c738b.png

划重点

Android有两种不同的classloaders:framework classloader和apk classloader,其中framework classloader知道怎么加载android classes,apk classloader继承自framework classloader,所以也知道怎么加载android classes。但在应用刚启动时,默认class loader是apk classloader,在系统内存不足应用被系统回收会再次启动,这个默认class loader会变为framework classloader了,所以对于自己的类会报ClassNotFoundException,就会出现android.os.BadParcelableException: ClassNotFoundException when unmarshalling

所以在bundle数据读取前,先设置classloader后,才能正确地读取自定义类

it.classLoader = TestData::class.java.classLoader

override fun transBundle(bundle: Bundle?): MutableList<TestData> {bundle?.let { it ->/*Android有两种不同的classloaders:framework classloader和apk classloader,其中framework classloader知道怎么加载android classes,apk classloader继承自framework classloader,所以也知道怎么加载android classes。但在应用刚启动时,默认class loader是apk classloader,在系统内存不足应用被系统回收会再次启动,这个默认class loader会变为framework classloader了,所以对于自己的类会报ClassNotFoundException就会出现android.os.BadParcelableException: ClassNotFoundException when unmarshalling*///所以在bundle数据读取前,先设置classloader后,才能正确的读取自定义类it.classLoader = TestData::class.java.classLoaderval price = it.getFloat("price")val qty = it.getInt("qty")mTestDatas.map { t->t.price = pricet.qty = qty}val list = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {it.getParcelableArrayList("listdatas", TestData::class.java)} else {it.getParcelableArrayList<TestData>("listdatas")}list?.let { item->mTestDatas.addAll(item)}}return mTestDatas}
  • 客户端中一样要把AIDL复制过来后,写实现方法

eaf105e68f5b5ae54d3f4ce1c6c80e3f.png

17d72430696f2118600e9c17af3ef1cd.png

运行效果

8de47c84cf6fb200a523d94555acebd3.png

2aacb10bfd4c80ae007e0aac65351aa2.png

d2b72a19a665fa04fd04e209865fc1a7.png

关于oneway关键字

AIDL中的oneway关键字,主要用来使IPC调用变成非阻塞的。

oneway需要注意的几点:

  1. 将远程调用改为异步调用,使得远程调用变成非阻塞式的,客户端不需要等待服务端的处理,只是发送数据并立即返回。要注意的是,oneway修饰本地调用没有效果,仍然是同步的,客户端需要等待服务端的处理。

  2. 在同一个IBinder对象调用中,会按照调用顺序依次执行,不同的IBinder对象可能导致调用顺序和执行顺序不一致。

  3. oneway不能带有返回值或抛出异常,因为客户端是无法接收的。

Demo源码中也已经更新上传了。

源码地址

https://github.com/Vaccae/AndroidAIDLDemo.git

点击原文链接可以看到“码云”的源码地址

c58e4de0ca89391349ba2b8a1db2ca08.png

a9ea02f8e957fa03f0ce2e6e337ab7eb.png

往期精彩回顾

 

ee3ad239a49ee122e88f1fbbf1344b26.jpeg

Android Aidl跨进程通讯(二)--异常捕获处理

 

 

547c7d41a4b05fafaa9eea0572487e20.jpeg

Android Aidl跨进程通讯的简单使用

 

 

db1fbae1322f231a4086d3930539717b.jpeg

Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

 

 

http://www.tj-hxxt.cn/news/74156.html

相关文章:

  • 网站建设历史灰色词快速排名接单
  • 蚌埠做网站建设费用中国营销网官网
  • 深圳南山网站建设公司南山网站seo
  • 如何建设网站兴田德润简介呢品牌营销服务
  • 网站开发建设方案的主要内容包括人工在线客服
  • 网站开发包括什么建站为应用技术
  • 第一个做装修的网站谷歌外贸seo
  • 哪个网站有工笔教程技能培训有哪些科目
  • 宁波做亚马逊网站今日头条搜索引擎
  • 莱芜做网站号码方象科技服务案例
  • 万网 网站建设方案书有哪些网页设计公司
  • 武汉建设网站官网无锡百度快照优化排名
  • 毕业设计代做网站 知乎seo与网络推广的区别和联系
  • 在线写作网站最有创意的广告语30条
  • 哔哩哔哩推广网站在线注册网站
  • 哪里长沙网站开发巨量算数关键词查询
  • 五大建设是什么内容seo网站推广服务
  • win7图标显示wordpress国内好的seo
  • 商城网站怎么做优化扬州网站seo
  • 做网站的步骤 优帮云河南推广网站的公司
  • 公司网站如何更改内容seo营销推广全程实例
  • 在线正能量网站地址链接免费广州疫情最新数据
  • 哪些网站开业做简单海报sem扫描电镜
  • 3e网站建设企业管理培训
  • 做网站的公司需要什么资质百度指数的基本功能
  • 网站开发客户提供素材杭州seo搜索引擎优化公司
  • 河南手机网站建设公司排名新公司怎么做网络推广
  • 做a三级视频在线观看网站站长之家seo
  • 网站开发流程图工具百度推广销售话术
  • 关于做网站的搞笑段子百度官网下载安装到桌面上