高通平台常见的一些错误(持续更新)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010586698/article/details/56673158
一,Could not read input channel file descriptors from parcel。
1.RemoteView中添加的图片太大了,超过40K会报这个异常
2.Intent传递的数据太大了超过1M也会报这个错误
3.FileDescripter太多而且没有关闭,looper太多没有quit。
4.试试在AndroidManefest.xml中对当前Activity配置configchange=“orientation|keyboardHidden”强制在Activity横竖屏切换的时候不重新onCreate。
5.谷歌原生BUG很多人都遇到这个问题而且没有得到解决

二,android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running ?
Android的对话框常用的有两种:PopupWindow和AlertDialog。PopupWindow顾名思义为弹出菜单,比如设置等。AlertDialog为系统原生的对话框。
1,错误分析:此问题根本原因就是由于将要弹出的对话框所要依附的View已经不存在导致的。
2,什么地方可能照成此问题:当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行了。
此外,很多时候我们需要通过一个非组件类来调用一个view类的方法来弹出dialog或Toast,这样就需要再提供一个静态context来创建这个dialog或者Toast

例如:我们在一个view中通过一个静态类来弹出一个对话框:

AlertDialog.Builder builder = new AlertDialog.Builder(mContextNew);当然并不是所有静态context都是可以用来创建dialog的,

例如***App().getApplication().getApplicationContext()这个context就不行,因为它并不代表哪一个Activity或者View。。这样就无法add这个dialog。此view用于绑定显示数据,我们在其构造方法中初始化一个静态变量mContextNew为此view的mContext。这样我们就可以通过一个静态类来弹出对话框了,只需传入这个静态的context(mContextNew)就可以了。但是这个静态的context如果只在构造方法中初始化的话是会存在问题的,因为如果另起了一个界面其绑定数据的view也是用的这个view那么这个静态context就会被重新修改。。因此当这个新的界面finish后返回到上次的界面,这个静态的context是刚才已经finish的view的context。因此如果仍然传入这个静态变量通过一个静态类来弹出对话框就会出现上述找不到window的错误了。

解决办法:

(1)对于tab页出现的错误可以用其父类的context来弹出dialog;

(2)对于界面已经销毁引起的错误就只能判断界面是否存在然后再弹出了;

(3)对于利用静态context来弹出的dialog可以通过规避的方式来解决,比如避免出现静态context被修改。但是这样就可能限制了我们程序的功能。因此我们可以通过在bind数据时时时更新这个静态context就可以解决此问题了,这样就可以保证这个静态的context在任何view中都是当前的界面的view的context。就不会出现找不到其父类window了。

三,桌面点击云服务应用提示未安装

问题产生原因:

可能是因为桌面配置文件里边的包名和类名发生变化导致的。

问题分析

1)首先应该确定一下这个应用是否已经正确安装,如果已经安装则排除此原因。正常情况下,如果此应用未安装,则桌面不会显示该应用的icon。如果应用未安装,但是桌面图标依然存在,那么很大的可能性是因为桌面缓存没有清除,清除缓存之后再查看一下桌面图标是否还存在。

2)如果在设置应用下边查看该应用正常安装,那么需要到配置文件中查看对应的配置的包名和类名是否与安装的包名的类名一致。对于有源码的应用可以直接到清单文件里边查看包名和类名,在文件AndroidManifest.xml中。对于没有源码的第三方apk可以在终端用命令抓取对应的log进行查找。

3)一般情况下不会是包名发生改变,因为如果包名发生改变的话,则桌面不会显示图标。

4)如果配置文件中的类名发生变化有两种情况,一种是此应用中类名不存在,这样就会直接导致桌面无法显示应用图标。还有一种情况就是应用中存在此类名,但是这个类没有launcher属性,<category android:name="android.intent.category.LAUNCHER" />这样的情况下就会出现桌面点击图标没法启动该应用,提示此应用未安装。如果该类中存在这个属性,那么点击桌面图标肯定会正常启动该应用。

解决办法:通过抓取log的方法查询正常启动的应用的包名的对应的类名,修改即可。





猜你喜欢

转载自blog.csdn.net/u010586698/article/details/56673158