溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么使用Intent傳大數據

發布時間:2023-03-01 17:22:20 來源:億速云 閱讀:198 作者:iii 欄目:開發技術

這篇“Android怎么使用Intent傳大數據”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Android怎么使用Intent傳大數據”文章吧。

Intent傳大數據

平時可能不會發生這種問題,但比如我之前是做終端設備的,我的設備每秒都會生成一些數據,而長時間的話數據量自然大,這時當我跳到另外一個頁面使用intent把數據傳過去的時候,就會報錯

我們調用

intent.putExtra("key", value) // value超過1M

會報錯

android.os.TransactionTooLargeException: data parcel size xxx bytes

這里的xxx就是1M左右,告訴你傳輸的數據大小不能超過1M,有些話咱也不敢亂說,有點怕誤人子弟。我這里是憑印象說的,如果有大佬看到我說錯,請狠狠的糾正我。

這個錯誤描述是這么描述,但真的是限死1M嗎,說到這個,就不得不提一樣東西,Binder機制,先不要跑,這里不會詳細講Binder,只是提一嘴。

說到Binder那就會聯系到mmap內存映射,你可以先簡單理解成內存映射是分配一塊空間給內核空間和用戶空間共用,如果還是不好理解,就簡單想成分配一塊空間通信用,那在android中mmap分配的空間是多少呢?1M-4K。

那是不是說Intent傳輸的數據超過1M-4K就會報錯,理論上是這樣,但實際沒到這個值,比如0.8M也可能會報錯。所以你不能去走極限操作,比如你的數據到了1M,你覺得只要減少點數據,減到8K,應該就能過了,也許你自己測試是正常的,但是這很危險。

所以能不傳大數據就不要傳大數據,它的設計初衷也不是為了傳大數據用的。如果真要傳大數據,也不要走極限操作。

那怎么辦,切莫著急,請聽我慢慢講。就這個Binder它是什么玩意,它是Android中獨特的進程通信的方式,而Linux中進程通信的方式,在Android中同樣也適用。進程間通信有很多方式,Binder、管道、共享內存等。為什么會有這么多種通信方式,因為每種通信方式都有自己的特點,要在不同的場合使用不同的通信方式。

為什么要提這個?因為要看懂這個問題,你需要知道Binder這種通信方式它有什么特點,它適合大量的數據傳輸嗎?那你Binder又與我Intent何干,你抓周樹人找我魯迅干嘛~~所以這時候你就要知道Android四大組件之間是用什么方式通信的。

有點扯遠了,現在可以來說說結論了,Binder沒辦法傳大數據,我就1M不到你想怎樣?當然它不止1M,只是Android在使用時限制了它只能最多用1M,內核的最大限制是4M。又有點扯遠了,你不要想著怎么把限制擴大到4M,不要往這方面想。前面說了,不同的進程通信方式,有自己的特點,適用于某些特定的場景。那Binder不適用于傳輸大數據,我共享內存行不行?

所以就有了解決辦法

bundle.putBinder()

有人可能一看覺得,這有什么不同,這在表面上看差別不大,實則內部大大的不同,bundle.putBinder()用了共享內存,所以能傳大數據,那為什么這里會用共享內存,而putExtra不是呢?想搞清楚這個問題,就要看源碼了。 這里就不深入去分析了,我怕勸退,不是勸退你們,是勸退我自己。有些東西是這樣的,你要自己去看懂,看個大概就差不多,但是你要講出來,那就要看得細致,而有些細節確實會勸退人。所以想了解為什么的,可以自己去看源碼,不想看的,就知道這是怎么一回事就行。

那還有沒有其它方式呢?當然有,你不懂共享內存,你寫到本地緩存中,再從本地緩存中讀取行不行?

辦法有很多,如果你不知道這個問題怎么解決,你找不到你覺得可行的解決方案,甚至可以通過邏輯通過流程的方式去繞開這個問題。但是你要知道為什么會出現這樣的問題,如果你沒接觸過進程通信,沒接觸過Binder,讓你看一篇文章就能看懂我覺得不切實際,但是至少得知道是怎么一回事。

以上就是關于“Android怎么使用Intent傳大數據”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女