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解析出错了。
- Android 开发,那些奇葩的问题
- Android环境搭建的那些奇葩问题
- android 开发奇葩问题
- Android开发奇葩问题整理
- 细数那些奇葩的问题
- 测试遇到的那些奇葩问题
- Android开发下遇到的一些奇葩问题处理
- iOS 开发过程中遇到的那些奇葩的坑
- 开发中碰到的奇葩问题
- ios开发中遇到的奇葩问题
- iOS开发的几个奇葩问题
- android开发遇到的奇葩坑
- android开发中遇到的那些问题
- 开发测试奇葩问题
- android studio 的奇葩环境问题
- 那些奇葩的代码注释
- 程序员奇葩面试的奇葩问题
- vs2010的奇葩问题
- Facebook分享报错:应用程序配置禁止了给定网址
- 记录一次stm32F429 IAP跳转到SDRAM内执行程序的DEBUG过程
- MultiByteToWideChar和WideCharToMultiByte
- SEO如何提升网站自然排名
- Java并发编程:Callable、Future和FutureTask
- Android 开发,那些奇葩的问题
- 在openwrt中安装使用 lsusb 查看 USB 设备
- 222. Count Complete Tree Nodes
- C++11的新特性
- RemoteViews
- JDBC介绍
- 利用mybatis-generator生成ORM
- ClassyShark - APK 分析利器
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition