getInstalledPackages(0)报错DeadSystemException

当我们使用getInstalledPackages(0)方法来获取其他app的安装信息,比如app图标,名称等等.

App会有一定概率出现DeadSystemException问题,会偶尔出现报错和crash错误  

context?.packageManager?.getInstalledPackages(0)?.forEach {
                it?.let { p ->
                    if (p.packageName == GOOGLE_MAP_PACKAGE_NAME) {
                        googleMapIcon.setImageDrawable(p.applicationInfo.loadIcon(context?.packageManager))
                        googleMapText.text =
                            context?.packageManager?.getApplicationLabel(p.applicationInfo)
                                .toString()
                    }
                    if (p.packageName == WAZE_PACKAGE_NAME) {
                        weizhiMapIcon.setImageDrawable(p.applicationInfo.loadIcon(context?.packageManager))
                        weizhiText.text =
                            context?.packageManager?.getApplicationLabel(p.applicationInfo)
                                .toString()
                    }
                }
            }

报错信息如下: 

Fatal Exception: java.lang.RuntimeException: android.os.DeadSystemException
       at android.app.ApplicationPackageManager.getInstalledPackagesAsUser(ApplicationPackageManager.java:1031)
       at android.app.ApplicationPackageManager.getInstalledPackages(ApplicationPackageManager.java:1016)
       at com.xxx.xxx.app_common.utils.NavigateSelectUtils$NavigateDialog.onCreateView(NavigateSelectUtils.java:458)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2963)
       at androidx.fragment.app.DialogFragment.performCreateView(DialogFragment.java:489)
       at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:518)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2189)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2100)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:2002)
       at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
       at android.os.Handler.handleCallback(Handler.java:938)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:250)
       at android.app.ActivityThread.main(ActivityThread.java:7844)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)

根据方法栈调用信息,报错的地点很明显是运行时异常

 解决方案:使用getApplicationInfo方法去获取app信息,一方面可以捕获异常,一方面可以获取到app的信息

try {
                context?.packageManager?.getApplicationInfo(
                    GOOGLE_MAP_PACKAGE_NAME,
                    PackageManager.GET_META_DATA
                )?.run {
                    googleMapIcon.setImageDrawable(this.loadIcon(context?.packageManager))
                    googleMapText.text =
                        context?.packageManager?.getApplicationLabel(this)
                            .toString()
                }

                context?.packageManager?.getApplicationInfo(
                    WAZE_PACKAGE_NAME,
                    PackageManager.GET_META_DATA
                )?.run {
                    weizhiMapIcon.setImageDrawable(this.loadIcon(context?.packageManager))
                    weizhiText.text =
                        context?.packageManager?.getApplicationLabel(this)
                            .toString()
                }
            } catch (e: PackageManager.NameNotFoundException) {
                e.printStackTrace()
            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值