专栏首页风吹杨柳实习杂记(32):getApplicationInfo或者getPackageManger出错

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

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

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

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

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

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

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

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

<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>

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

<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比较好。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java学习---------IO流学习---文件流inputstream outputstream(二)

    下面的方法是:10字节10字节的复制,并且会把目标文件原来的内容给覆盖掉,如果目标文件原来有内容的话。

    wust小吴
  • 实习杂记(27):如何解决Java.lang.NoClassDefFoundError

    其中第7点就是我碰到的原因,在android中主dex调用子dex的类,那肯定是不行的,因为那个时候子dex还没有加载,那么调用的类肯定就不行了,

    wust小吴
  • SCSS的特点

    使用scss时候在所在的style样式标签上添加lang=”scss”即可应用对应的语法,否则报错

    wust小吴
  • 计算机程序的思维逻辑 (7) - 如何从乱码中恢复 (下)?

    乱码 上节说到乱码出现的主要原因,即在进行编码转换的时候,如果将原来的编码识别错了,并进行了转换,就会发生乱码,而且这时候无论怎么切换查看编码的方式,都是不行...

    swiftma
  • 队列的一种实现:循环队列

    WindWant
  • 未来大前端技术趋势深度解读

    自Vue.js 3.0爆出,三大主流框架,写法也是越来越相似,越来越贴近 WebComponents 标准,而周边应用层面的封装已经开始指数级增长。小程序是今年...

    Javanx
  • 出了Linux 故障找不到方法?看大牛简单、朴实的解决思路

    本文由马哥教育Linux云计算面授班23期学员推荐,转载自互联网,作者为Lis,Linux资深技术专家,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛...

    小小科
  • 《Kotlin 极简教程》涉嫌抄袭

    最近发现 《Kotlin 极简教程》一书中关于 Native 的一章(第 16 章)与我很早在公众号发过的一篇文章 Kotlin Native 详细体验,你想要...

    bennyhuo
  • Linux进程间通信之消息队列

      马上过年了,心里万般滋味。。。 一,消息队列 1,概念:“消息队列”是在消息的传输过程中保存消息的容器 2,消息队列就是一个消息的链表。可以把消息看作一个记...

    xcywt
  • 洛谷P1887 乘积最大3

    题目描述 请你找出M个和为N的正整数,他们的乘积要尽可能的大。 输出字典序最小的一种方案。 输入输出格式 输入格式: 一行,两个正整数N,M 输出格式: M个...

    attack

扫码关注云+社区

领取腾讯云代金券