原文出处:http://blog.csdn.net/xxooyc/article/details/50162523,(部分修改)
bug描述
W/System.err: java.lang.RuntimeException: Package manager has died
W/System.err: at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:122)
W/System.err: at com.qq.googleplay.common.utils.AppUtil.isInstalled(AppUtil.java:73)
W/System.err: at com.qq.googleplay.manager.DownloadManager.getDownLoadInfo(DownloadManager.java:182)
W/System.err: at com.qq.googleplay.ui.fragment.HomeFragment$HomeAdapter$1.run(HomeFragment.java:179)
W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
W/System.err: at java.lang.Thread.run(Thread.java:818)
出现bug的代码
/**
* 判断包是否安装
*
* @param context
* @param packageName
* @return
*/
public static boolean isInstalled(Context context, String packageName) {
PackageManager manager = context.getPackageManager();
try {
manager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return true;
} catch (PackageManager.NameNotFoundException e) {
return false;
}
}
bug分析
frameworks/base/core/java/Android/app/ApplicationPackageManager.java
@Override
public PackageInfo getPackageInfo(String packageName, int flags)
throws NameNotFoundException {
try {
PackageInfo pi = mPM.getPackageInfo(packageName, flags, mContext.getUserId());
if (pi !=