TransactionTooLargeException 解決辦法

omg 今天遇見(jiàn)了一個(gè) 非常神奇的bug

解決辦法直接拉到最下面

一個(gè)行很常見(jiàn)的 獲取已經(jīng)安裝的apk信息

PackageManager pms = context.getPackageManager();
        List<PackageInfo> packinfos = pms
                .getInstalledPackages(PackageManager.GET_PERMISSIONS);

報(bào)出了
如下


4e11c84f9a3ddaed789b3a2d9b92d2a.png

Android develo 對(duì)TransactionTooLargeException描述

The Binder transaction failed because it was too large.

During a remote procedure call, the arguments and the return value of the call are transferred as `[Parcel](https://developer.android.com/reference/android/os/Parcel.html)` objects stored in the Binder transaction buffer. If the arguments or the return value are too large to fit in the transaction buffer, then the call will fail and `[TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)` will be thrown.

The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process. Consequently this exception can be thrown when there are many transactions in progress even when most of the individual transactions are of moderate size.

There are two possible outcomes when a remote procedure call throws `[TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)`. Either the client was unable to send its request to the service (most likely if the arguments were too large to fit in the transaction buffer), or the service was unable to send its response back to the client (most likely if the return value was too large to fit in the transaction buffer). It is not possible to tell which of these outcomes actually occurred. The client should assume that a partial failure occurred.

The key to avoiding `[TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)` is to keep all transactions relatively small. Try to minimize the amount of memory needed to create a `[Parcel](https://developer.android.com/reference/android/os/Parcel.html)` for the arguments and the return value of the remote procedure call. Avoid transferring huge arrays of strings or large bitmaps. If possible, try to break up big requests into smaller pieces.

If you are implementing a service, it may help to impose size or complexity contraints on the queries that clients can perform. For example, if the result set could become large, then don't allow the client to request more than a few records at a time. Alternately, instead of returning all of the available data all at once, return the essential information first and make the client ask for additional information later as needed.

翻譯
Binder事務(wù)失敗忙上,因?yàn)樗罅恕?/p>

在遠(yuǎn)程過(guò)程調(diào)用期間赦拘,調(diào)用的參數(shù)和返回值將作為[Parcel](https://developer.android.com/reference/android/os/Parcel.html)存儲(chǔ)在Binder事務(wù)緩沖區(qū)中的對(duì)象進(jìn)行傳輸燃异。如果參數(shù)或返回值太大而不適合事務(wù)緩沖區(qū)杨名,則調(diào)用將失敗[TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)并將被拋出。

Binder事務(wù)緩沖區(qū)具有有限的固定大小士骤,當(dāng)前為1Mb瓦胎,由進(jìn)程正在進(jìn)行的所有事務(wù)共享。因此衬鱼,即使大多數(shù)單個(gè)事務(wù)的大小適中,當(dāng)有許多事務(wù)正在進(jìn)行時(shí)憔杨,也會(huì)拋出此異常鸟赫。

遠(yuǎn)程過(guò)程調(diào)用拋出時(shí)有兩種可能的結(jié)果 [TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)∠穑客戶(hù)端無(wú)法將其請(qǐng)求發(fā)送到服務(wù)(很可能抛蚤,如果參數(shù)太大而無(wú)法放入事務(wù)緩沖區(qū)中),或者服務(wù)無(wú)法將其響應(yīng)發(fā)送回客戶(hù)端(最有可能的話(huà)寻狂,如果返回值為太大而不適合事務(wù)緩沖區(qū))岁经。無(wú)法確定實(shí)際發(fā)生了哪些結(jié)果∩呷客戶(hù)應(yīng)該假設(shè)發(fā)生了部分故障缀壤。

避免的關(guān)鍵[TransactionTooLargeException](https://developer.android.com/reference/android/os/TransactionTooLargeException.html)是保持所有交易相對(duì)較小。嘗試最小[Parcel](https://developer.android.com/reference/android/os/Parcel.html)化為參數(shù)創(chuàng)建所需的內(nèi)存量以及遠(yuǎn)程過(guò)程調(diào)用的返回值纠亚。避免傳輸大量字符串或大位圖塘慕。如果可能的話(huà),嘗試將大量請(qǐng)求分解成更小的部分蒂胞。

如果要實(shí)現(xiàn)服務(wù)图呢,則可能有助于對(duì)客戶(hù)端可以執(zhí)行的查詢(xún)施加大小或復(fù)雜性約束。例如啤誊,如果結(jié)果集可能變大岳瞭,則不允許客戶(hù)端一次請(qǐng)求多個(gè)記錄∥们拢或者瞳筏,不是一次性返回所有可用數(shù)據(jù),而是首先返回基本信息牡昆,然后根據(jù)需要讓客戶(hù)端請(qǐng)求其他信息姚炕。

很不幸的告訴你 我也沒(méi)有好的辦法

但是會(huì)有一點(diǎn)建議

參考

stackoverflow建議方案

同時(shí)我在github也找到一個(gè)方案
github建議方案

首先避免獲取全部的信息
如果要判斷某個(gè)app是否安裝 ,方式如下,,

private boolean packageExists(PackageManager packageManager, String packageName) {
        try {
            packageManager.getPackageInfo(packageName, 0);
            return true;
        } catch (PackageManager.NameNotFoundException ignored) {
            return false;
        }
    }

如果非要獲取全部的信息 在遍歷 祝你好運(yùn)了 ,

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市丢烘,隨后出現(xiàn)的幾起案子柱宦,更是在濱河造成了極大的恐慌,老刑警劉巖播瞳,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掸刊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赢乓,警方通過(guò)查閱死者的電腦和手機(jī)忧侧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)石窑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蚓炬,你說(shuō)我怎么就攤上這事松逊。” “怎么了肯夏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵经宏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我驯击,道長(zhǎng)烁兰,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任余耽,我火速辦了婚禮缚柏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碟贾。我一直安慰自己轨域,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布干发。 她就那樣靜靜地躺著朱巨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枉长。 梳的紋絲不亂的頭發(fā)上冀续,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音必峰,去河邊找鬼洪唐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛吼蚁,可吹牛的內(nèi)容都是我干的凭需。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肝匆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粒蜈!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起旗国,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枯怖,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后能曾,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體度硝,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡设捐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了塘淑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萝招。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖存捺,靈堂內(nèi)的尸體忽然破棺而出槐沼,到底是詐尸還是另有隱情,我是刑警寧澤捌治,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布岗钩,位于F島的核電站,受9級(jí)特大地震影響肖油,放射性物質(zhì)發(fā)生泄漏兼吓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一森枪、第九天 我趴在偏房一處隱蔽的房頂上張望视搏。 院中可真熱鬧,春花似錦县袱、人聲如沸浑娜。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)筋遭。三九已至,卻和暖如春暴拄,著一層夾襖步出監(jiān)牢的瞬間漓滔,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工乖篷, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留响驴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓那伐,卻偏偏與公主長(zhǎng)得像踏施,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子罕邀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容