x5中的出錯(cuò)堆棧
出錯(cuò)堆棧
其中堆棧中
java.lang.RuntimeException:Package manager has died android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:116)
我們采用的是SDK version是43500的可婶,根據(jù)堆棧信息com.tencent.smtt.utils.w.a
定位到j(luò)ar包中的此處
此處的getPackageInfo的調(diào)用出現(xiàn)了異常翔冀,同時(shí)該錯(cuò)誤為偶現(xiàn)罢坝,且都集中在了6.0和6.0以下的android版本中涉瘾。
關(guān)于問題的解釋可以參考這兩個(gè)鏈接的內(nèi)容:
由一條TransactionTooLargeException看binder傳輸過程中數(shù)據(jù)冗余的坑
這里提到了7.0之后對(duì)PackageInfo的修改
查找源碼的改動(dòng)可以發(fā)現(xiàn)
7.0的改動(dòng)
我們?cè)賮砜匆幌翽ARCELABLE_ELIDE_DUPLICATES這個(gè)Flag的作用:
/**
* Flag for use with {@link #writeToParcel}: a parent object will take
* care of managing duplicate state/data that is nominally replicated
* across its inner data members. This flag instructs the inner data
* types to omit that data during marshaling. Exact behavior may vary
* on a case by case basis.
* @hide
*/
大致意思是此標(biāo)志位會(huì)忽略掉這部分?jǐn)?shù)據(jù),同時(shí)測(cè)試發(fā)現(xiàn)這部分?jǐn)?shù)據(jù)是占比最大的,從而減輕了binder的占用
建議:TBS X5中應(yīng)該對(duì)此做一次try catch