国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

全國工程信息網(wǎng)優(yōu)化方案怎么寫

全國工程信息網(wǎng),優(yōu)化方案怎么寫,火星人網(wǎng)頁設計培訓,青島h5建站模板學更好的別人, 做更好的自己。 ——《微卡智享》 本文長度為2478字,預計閱讀6分鐘 前言 Android的AIDL使用和異常報錯都已經(jīng)介紹過了,今天這篇還是在原來的Demo基礎上加入幾個AIDL的進階使用方法。 】 AIDL進階使用 微卡智享 in,out,inout的使…

學更好的別人,

做更好的自己。

——《微卡智享》

e4779c31e5bb17eb75b5540ca986230a.jpeg

本文長度為2478,預計閱讀6分鐘

前言

Android的AIDL使用和異常報錯都已經(jīng)介紹過了,今天這篇還是在原來的Demo基礎上加入幾個AIDL的進階使用方法。

83980b3041623a9f09e87313c3a94fb1.png

AIDL進階使用

4da1eb7715c927a7f2ef822dfd3db7a7.png

微卡智享

in,out,inout的使用

關于in,out,inout在AIDL的基礎介紹中有提到過

AIDL中還有定向的Tag,包括了in、out、inout。其中 in 表示數(shù)據(jù)只能由客戶端流向服務端, out 表示數(shù)據(jù)只能由服務端流向客戶端,而 inout 則表示數(shù)據(jù)可在服務端與客戶端之間雙向流通。

Vaccae,公眾號:微卡智享Android Aidl跨進程通訊的簡單使用

根據(jù)字面意思可以很簡單的理解,所以我們直接做一個函數(shù)實現(xiàn)inout的方法即可。

  1. 在服務端的Aidl文件中加入一個新的函數(shù)updateTestDatsList,輸入的參數(shù)設置為inout

    72ecd805f35133ca0de3778dabbdc77c.png

  2. Build后在Service的object : ITestDataAidlInterface.Stub()里面寫入實現(xiàn),這里我們先將傳入的list里面再自定義加入一條,然后插入到Service緩存的List列表中,再將傳入的listdata清空后,把Service緩存中的所有數(shù)據(jù)都插入傳入的listdata

    dcdbd58987528bcc6fe7edd541ce5138.png

  3. 因為是跨進程,所以客戶端需要將修改后的Aidl復制過來替換原來的,然后在MainActivity中寫入實現(xiàn)調用

    00eb5ad582a250b3ed07bee217feb03d.png

    53651c7c56937029577f70e13e51b47e.png

    運行效果

    d3b2228e4e517630bfcfa815b9dc8c47.png

14c92d184347825876b30f605571d94b.png

0e93f54bf644defebddf6a56b3bb9006.png

點擊更新列表后的對比,可以看到,使用inout參數(shù),傳入的list最后也已經(jīng)修改完成。

AIDL使用Bundle傳遞多個數(shù)據(jù)

AIDL可以使用Bundle類封裝通訊數(shù)據(jù),用于傳遞一些復雜的對象或者多個對象。

Bundle類是一個鍵值對的容器,它可以存儲不同類型的數(shù)據(jù),并且實現(xiàn)了Parcelable接口,所以可以在進程間傳輸。

  • Service的AIDL接口加入新的函數(shù)transBundle,傳入的參數(shù)就是Bundle

5ec2f32a5b1504e176b7ed3a1020c8c9.png

  • 在Service加入接口實現(xiàn),這里我們測試里面加入一個Float,一個Int,和一個List數(shù)據(jù),將原來的價格和數(shù)量都統(tǒng)一改為一樣的數(shù)據(jù)后,再將傳入的list加入到后面,最后展現(xiàn)出來,

4323edfbc7984e8bc77b95187d1c738b.png

劃重點

Android有兩種不同的classloaders:framework classloader和apk classloader,其中framework classloader知道怎么加載android classes,apk classloader繼承自framework classloader,所以也知道怎么加載android classes。但在應用剛啟動時,默認class loader是apk classloader,在系統(tǒng)內存不足應用被系統(tǒng)回收會再次啟動,這個默認class loader會變?yōu)閒ramework classloader了,所以對于自己的類會報ClassNotFoundException,就會出現(xiàn)android.os.BadParcelableException: ClassNotFoundException when unmarshalling

所以在bundle數(shù)據(jù)讀取前,先設置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,在系統(tǒng)內存不足應用被系統(tǒng)回收會再次啟動,這個默認class loader會變?yōu)閒ramework classloader了,所以對于自己的類會報ClassNotFoundException就會出現(xiàn)android.os.BadParcelableException: ClassNotFoundException when unmarshalling*///所以在bundle數(shù)據(jù)讀取前,先設置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復制過來后,寫實現(xiàn)方法

eaf105e68f5b5ae54d3f4ce1c6c80e3f.png

17d72430696f2118600e9c17af3ef1cd.png

運行效果

8de47c84cf6fb200a523d94555acebd3.png

2aacb10bfd4c80ae007e0aac65351aa2.png

d2b72a19a665fa04fd04e209865fc1a7.png

關于oneway關鍵字

AIDL中的oneway關鍵字,主要用來使IPC調用變成非阻塞的。

oneway需要注意的幾點:

  1. 將遠程調用改為異步調用,使得遠程調用變成非阻塞式的,客戶端不需要等待服務端的處理,只是發(fā)送數(shù)據(jù)并立即返回。要注意的是,oneway修飾本地調用沒有效果,仍然是同步的,客戶端需要等待服務端的處理。

  2. 在同一個IBinder對象調用中,會按照調用順序依次執(zhí)行,不同的IBinder對象可能導致調用順序和執(zhí)行順序不一致。

  3. oneway不能帶有返回值或拋出異常,因為客戶端是無法接收的。

Demo源碼中也已經(jīng)更新上傳了。

源碼地址

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

點擊原文鏈接可以看到“碼云”的源碼地址

c58e4de0ca89391349ba2b8a1db2ca08.png

a9ea02f8e957fa03f0ce2e6e337ab7eb.png

往期精彩回顧

?

ee3ad239a49ee122e88f1fbbf1344b26.jpeg

Android Aidl跨進程通訊(二)--異常捕獲處理

?

?

547c7d41a4b05fafaa9eea0572487e20.jpeg

Android Aidl跨進程通訊的簡單使用

?

?

db1fbae1322f231a4086d3930539717b.jpeg

Android BlueToothBLE入門(三)——數(shù)據(jù)的分包發(fā)送和接收(源碼已更新)

?

?

?

http://aloenet.com.cn/news/35427.html

相關文章:

  • 成都建站seo百度關鍵詞排名優(yōu)化
  • 自己用鋼管做里閃彈槍視頻和照網(wǎng)站b站視頻推廣
  • 網(wǎng)站美工做專題尺寸多少?如何快速推廣網(wǎng)上國網(wǎng)
  • 合肥網(wǎng)絡科技有限公司做網(wǎng)站短視頻推廣渠道
  • 用照片做模板下載網(wǎng)站好廣告推廣費用
  • 大連做網(wǎng)站誰家售后好整站關鍵詞快速排名
  • 網(wǎng)站公安備案網(wǎng)址寧波seo優(yōu)化公司
  • 辦公室租賃seo查詢友情鏈接
  • 建設網(wǎng)站的規(guī)則廣州私人做網(wǎng)站
  • 軟件論壇網(wǎng)站有哪些百度推廣河南總部
  • 注冊網(wǎng)站費屬于什么費用智慧軟文
  • 網(wǎng)絡規(guī)劃設計師屬于高級職稱嗎北京網(wǎng)站優(yōu)化指導
  • 如何做全景素材網(wǎng)站網(wǎng)絡營銷的幾種模式
  • 深圳電子商務網(wǎng)站建設百度關鍵詞優(yōu)化快速排名軟件
  • 淘金企業(yè)網(wǎng)站建設紹興seo排名外包
  • 房價走勢最新消息2022aso優(yōu)化運營
  • 公司做網(wǎng)站的費用怎么做賬百度權重劃分等級
  • 網(wǎng)站模版保護域名跳轉長沙seo優(yōu)化服務
  • 黃頁網(wǎng)站大全通俗易懂免費域名注冊永久
  • 展覽公司網(wǎng)站建設方案百度seo可能消失
  • 免費建立平臺網(wǎng)站關系營銷案例
  • 北京企業(yè)網(wǎng)站設計公司自己建網(wǎng)站要多少錢
  • 洛陽做多屏合一網(wǎng)站公司廣告推廣方案
  • 佛山做網(wǎng)站制作公司長沙seo霸屏
  • 為什么選擇當網(wǎng)站設計人員怎么做電商賣東西
  • 莘縣建設局網(wǎng)站鏈接搜索
  • 商業(yè)網(wǎng)站圖片百度聯(lián)系電話
  • 網(wǎng)站建設手機端官網(wǎng)網(wǎng)站關鍵詞優(yōu)化排名推薦
  • 男性網(wǎng)站推廣方法品牌營銷策劃書
  • 云南專業(yè)做網(wǎng)站多少錢北京網(wǎng)站優(yōu)化常識