前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实习杂记(32):getApplicationInfo或者getPackageManger出错

实习杂记(32):getApplicationInfo或者getPackageManger出错

作者头像
wust小吴
发布2019-07-08 18:24:42
1.4K0
发布2019-07-08 18:24:42
举报
文章被收录于专栏:风吹杨柳风吹杨柳

发生这种错误原因第一个是:binder通信

getPackageManger  是通过binder通信的,最大通信是1M,而且这个binder通信是系统整个的,

也就是当前整个手机APP所有应用同一个时刻,或者同一个时间内 进行通信   超过了IM,

就会报:RuntimeException  和  RomatoException      这里大家想的办法是同步,不能一定保证的,

第二个原因是:是我们写代码的习惯连着写,如下面这样的:

getPackageManger.getApplicationInfo(),这个时候编辑器智能提示的  只有getApplicationInfo()可能发生的异常,NameNotFoundException 

从而让我们忽略了  运行时异常,导致程序崩溃。这里大家想的办法是分开,我推荐这种

代码语言:javascript
复制
<span style="font-size:18px;"><strong>    public static ApplicationInfo getApplicationInfo(Context context) {
        PackageManager pm;
        String packageName;
        try {
            pm = context.getPackageManager();
            packageName = context.getPackageName();
        } catch (RuntimeException e) {
            return null;
        }
        if (pm == null || packageName == null) {
            return null;
        }
        ApplicationInfo applicationInfo;
        try {
            applicationInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
        } catch (PackageManager.NameNotFoundException e) {
            return null;
        }
        return applicationInfo;
    }</strong></span>

当然还有一种是如果习惯连着写,那就把两种异常   选择他们的父类即可,

代码语言:javascript
复制
<span style="font-size:18px;"><strong>		try {
			PackageManager pm = mContext.getPackageManager();
			ApplicationInfo ai = pm.getApplicationInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);
			return ai.uid;
		} catch (Exception e) {
			e.printStackTrace();
		}</strong></span>

这里为什么不采用同步,因为那个还是无法避免超过1M的,所以只要无法获取就直接返回NULL比较好。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年08月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档