Android 开发,那些奇葩的问题

来源:互联网 发布:淘宝千人千面好不好 编辑:程序博客网 时间:2024/06/04 18:36

开发过程中,总会遇到一些让人棘手又意外的问题。代码明明”没有问题”,怎么就是不对呢?本帖就用来记录作者在开发过程中遇到的那些意想不到的问题。


1、Intent中携带的数据错位了

使用Intent携带数据再平常不过了,谁会想到这都会出问题。简单描述如下:

Intent中携带的数据本来是

"key1":"value1""key2":"value2""key3":"value3"

但是接收到后变成了:

null:"key1""value1":"key2""value2":"key3"

太奇葩了!!

最后发现是一个疏忽引起的,其中一个对象在序列化的时候出了问题,writeParcel的时候漏写了一个变量。而Bundle是用ArrayMap保存数据的,猜测是读错该对象了,导致其他的数据也出了问题。


2、程序前后台的判断出了问题

先上判断前后台的代码:

    public static boolean isAppOnForeground(Context applicationContext) {        if (null == applicationContext) return false;        ActivityManager activityManager = (ActivityManager) applicationContext.getSystemService(Context.ACTIVITY_SERVICE);        String packageName = applicationContext.getPackageName();        List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager                .getRunningAppProcesses();        if (appProcesses == null) return false;        for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {            // The name of the process that this object is associated with.            if (appProcess.processName.equals(packageName)                    && appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {                return true;            }        }        return false;    }

在BaseActivity的onStart()和onStop()方法中各自判断一次。我们的程序中,这段代码在其他手机上都没有问题,唯独在MIUI7.3.2.0上失效了,一直显示在前台呀!!但是把这段程序单独拿出来在Demo中跑,结果又是正确的,懵了有没有??

N久后,终于在我们程序的DaemonService上找到了端倪。DaemonService运行在其他进程,启动的时候用到了

public boolean bindService(Intent service, ServiceConnection conn,int flags)

这个方法,其中最后一个参数flags设置的是

Context.BIND_AUTO_CREATE

程序在后台的时候,主进程和守护进程在的importance字段在其他手机上是130,但在MIUI7.3.2.0上是100(即前台)。改成

Context.BIND_NOT_FOREGROUND

在MIUI7.3.2.0上变成了130。

不知道是不是很好地解决方案,但找到原因了,还愁没有好的解决方法吗?


3、网上发现的一个问题:

If Android decides to update the system’s Webview while your app is running, it might crash your app: http://stackoverflow.com/questions/29575313/namenotfoundexception-webview


4、图片在特定的api版本中显示异常

刚分配的任务,问题是来消息显示系统通知时,默认的App图标在android5.0系统显示的不对。当时就懵了,难道图片还会选择版本自动变换不成?没想到结果真是如此。resw文件夹下,新建drawable-hdpi-v21就会在api版本为21时,显示这里面的图片。


5、通过Arrays.asList()函数产生的List不可更改。

查看源码可知,该函数返回的ArrayList对象是Arrays类的私有静态内部类,不同我们一般使用的ArrayList。该类只提供了少数几个函数的支持,不提供add、remove方法


6、使用MVVM模式编写的UI,在一次提交后,可编译不可运行,报空指针异常。

被DataBinding害惨了。查了好久,最后发现有同事在getWindow().getDecorView().findViewById(android.R.id.content)这个View上添加了一个View,然后DataBinding解析出错了。

0 0
原创粉丝点击