欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android使用Intent傳大數(shù)據(jù)簡單實現(xiàn)詳解

 更新時間:2023年03月01日 09:15:54   作者:流浪漢kylin  
這篇文章主要為大家介紹了Android使用Intent傳大數(shù)據(jù)簡單實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

最近想不出什么比較好的內容,但是碰到一個沒畢業(yè)的小老弟問的問題,那就借機說說這個事。Intent如何傳大數(shù)據(jù)?為什么是簡單的說,因為這背后深入的話,有很多底層的細節(jié)包括設計思想,我也不敢說完全懂,但我知道當你用Intent傳大數(shù)據(jù)報錯的時候應該怎么解決,并且簡單聊聊這背后所涉及到的東西。

Intent傳大數(shù)據(jù)

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

我們調用

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

會報錯

android.os.TransactionTooLargeException: data parcel size xxx bytes

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

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

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

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

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

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

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

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

所以就有了解決辦法

bundle.putBinder()

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

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

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

比如我只說bundle.putBinder()能解決這個問題,你一試,確實能解決,但是不知道為什么,你又怕會不會有其它問題。雖然這篇文章我一直在打擦邊球,沒有提任何的原理,但我覺得還是能大概讓人知道為什么bundle.putBinder()能解決Intent傳大數(shù)據(jù),你也就能放心去用了。

以上就是Android使用Intent傳大數(shù)據(jù)簡單實現(xiàn)詳解的詳細內容,更多關于Android Intent傳大數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • Android TreeView實現(xiàn)帶復選框樹形組織結構

    Android TreeView實現(xiàn)帶復選框樹形組織結構

    這篇文章主要為大家詳細介紹了Android TreeView實現(xiàn)帶復選框樹形組織結構,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Android studio 混淆配置詳解

    Android studio 混淆配置詳解

    這篇文章主要介紹了Android studio 混淆配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • Flutter路由框架Fluro使用簡介

    Flutter路由框架Fluro使用簡介

    這篇文章主要介紹了Flutter路由框架Fluro使用簡介,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01
  • Android組件之間交互核心Intent用法分析

    Android組件之間交互核心Intent用法分析

    這篇文章主要介紹了Android組件之間交互核心Intent用法,結合實例形式分析了Intent實現(xiàn)組件之間交互的步驟與相關技巧,需要的朋友可以參考下
    2016-06-06
  • 解決android studio引用遠程倉庫下載慢(JCenter下載慢)

    解決android studio引用遠程倉庫下載慢(JCenter下載慢)

    這篇文章主要介紹了解決android studio引用遠程倉庫下載慢(JCenter下載慢),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • Android StringBuffer的使用方法詳解

    Android StringBuffer的使用方法詳解

    StringBuffer類和String一樣,也用來代表字符串,只是由于StringBuffer的內部實現(xiàn)方式和String不同,所以StringBuffer在進行字符串處理時,不生成新的對象,在內存使用上要優(yōu)于String類
    2017-07-07
  • Android Flutter實現(xiàn)淘寶App的搜索推薦

    Android Flutter實現(xiàn)淘寶App的搜索推薦

    這篇文章主要為大家詳細介紹了Android?Flutter如何模擬實現(xiàn)淘寶App的搜索推薦,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2023-07-07
  • Android 常見的四種對話框實例講解

    Android 常見的四種對話框實例講解

    這篇文章主要介紹了android 常見的四種對話框實例講解,非常不錯,具有參考借鑒價值,對android 對話框相關知識感興趣的朋友一起看看吧
    2016-09-09
  • AndroidStuio插件開發(fā)適用于jetbrains全家桶

    AndroidStuio插件開發(fā)適用于jetbrains全家桶

    這篇文章主要介紹了AndroidStuio插件開發(fā)適用于jetbrains全家桶,本文通過實例給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Android應用中使用ViewPager和ViewPager指示器來制作Tab標簽

    Android應用中使用ViewPager和ViewPager指示器來制作Tab標簽

    這篇文章主要介紹了Android中使用ViewPager和ViewPager指示器來制作Tab標簽的方法,ViewPager指示器ViewPageIndicator是一個開源庫,文中舉了一個仿網易新聞客戶端Tab標簽的例子,需要的朋友可以參考下
    2016-03-03

最新評論