1. 使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题。
  2. 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在系统状态栏下方的(Android 5.1.1系统),在华为3C,三星S4,红米Note2(5.0.2)上表现正常。
  3. 裁剪图片并且以bitmap返回时,如果你调用的是系统的裁剪功能,当图片过大时在米3当中将会导致系统的裁剪图片应用引发TransactionTooLargeException异常,并且不断重试,且需要重启手机才能恢复。大图的裁剪建议使用URL而不是直接返回数据。
  4. 不要使用Build.FINGERPRINT的值是否为"unknown"或是否以其开头来判断是否为模拟器,因为魅蓝的这个字段就是unknown。
  5. bitmap如果是alpha图,rgb储存的是预乘了alpha的数值(来自QQ群242876551)
  6. 重度使用Fragment者,在Fragment中使用SurfaceView(包括3D地图)时需注意机型的兼容,有可能出现部分机型中从其他Activity回来时,surfaceview的绘制会覆盖到最上面(仅仅是画面覆盖到其他控件上面,但不影响其他控件),在米2,三星S4上出现过,偶发。
  7. 不要在Activity或Fragment没有完全显示时弹出PopupWindow,如果需要,使用其中的view.post(runnable)方法来执行弹出的代码。
  8. 有虚拟导航栏的手机,使用showAsDropDown弹出的高度为MATCH_PARENT的PopupWindow的底部会被虚拟导航栏所覆盖。
  9. 更改应用图标之后,小米的ROM的桌面图标是没有更新的,需要切换主题或重启。
  10. 调用RadioGroup.check(int id)时,RadioGroup.OnCheckedChangeListener. onCheckedChanged(RadioGroup group, int checkedId);会被调用多次。源码如下:

    java

    public void check(int id) {

    // don’t even bother

    if (id != -1 && (id == mCheckedId)) {

    return;

    }

    if (mCheckedId != -1) {

    setCheckedStateForView(mCheckedId, false);

    }

    if (id != -1) {

    setCheckedStateForView(id, true);

    }

    setCheckedId(id);

    }

    其中:

    1. setCheckedStateForView(mCheckedId, false);会导致onCheckedChanged(RadioGroup group, int checkedId)被调用,传的id是上一次被选中的id,其获取到的选中状态为false。
    2. setCheckedStateForView(id, true);会导致onCheckedChanged(RadioGroup group, int checkedId)被调用,传的id是本次被选中的id,其获取到的选中状态为true。
    3. setCheckedId(id);会直接回调onCheckedChanged(RadioGroup group, int checkedId),与上一条一样,传的id是本次被选中的id,其获取到的选中状态为true。
  11. 使用满屏的对话框,显示之后,在华为P7(5.1.1)上锁屏再解锁,下面的内容会少掉大约系统状态栏的高度的内容。非必现,但概率极高。

  12. 竖屏拍照时设置相机旋转,在手里的三星S4上拍的照还是横着的,它只是写入旋转的Exif信息。
  13. 在酷派手机上,拍照时如果PreviewSize和PictureSize相差太大时,生成的图片的拍摄范围可能和预览的拍摄范围不一样(可能比预览的范围小)。
  14. 对一个Bitmap,调用Bitmap.create(xxx)方法创建一个新的bitmap,并设置到ImageView上,如果回收旧的bitmap,在手里的华为3C上,ImageView无法显示图片。
  15. 一些手机通过getSupportFragmentManager().beginTransaction().replace()先后显示两个fragment之后,调用getSupportFragmentManager().getFragments()返回的ArrayList<Fragment>,可能size是两个,但是第一个却是为空的。



  16. 在定义的shape中,如果没有通过solid或其他元素指定shape颜色,可能导致在部分手机上背景是黑的。包括一些View以及LinearLayoutdivider
  17. 如果是通过RadioGroupRadioButton来实现底部Tab,则可能在一些手机上文字及drawableTop是偏向右边的,即使把gravity属性设为水平居中。通过设置android:paddingLeft="0dp"android:background="@color/transparent"可以解决。
  18. AndroidManifest.xmlapplication节点的android:supportsRtl属性,可能会影响到popupwindowTextView的布局。我遇过它使我的TextView的文字由居中变成了左对齐。
  19. 华为EMUI3.1虽号称基于Android5.1,但是却不能通过调用setStatusBarColor()接口来设置系统状态栏颜色,只能通过4.4.2的方式,在StatusBar上添加一个与其同高的View来设置颜色。具体见https://github.com/msdx/status-bar-compat
  20. 魅族Flyme5.1.9对系统状态栏大改,虽然Android版本是6.0以下,但是可以使用6.0的方式来设置StatusBar颜色,但是,当有多个界面切换时,StatusBar的图标及文字的颜色可能无法控制(如当切换界面时,白色的图标或文字会变成黑色)。
  21. LinearLayout设置分割线,showDividers="middle|end",当最后一个View设置为GONE时会导致最后一条分割线不显示出来。解决方法是设置showDividers="middle",然后在LinearLayout里面最后添加一个没有内容的View。具体参考:http://stackoverflow.com/questions/24187698/bottom-divider-is-missing-when-visibility-of-the-last-view-is-set-to-gone-in-lin#answer-24189135
  22. 数字前面加“+”号的字符串,如“+00”,转换为int类型,在Android 4.4.2中会报java.lang.NumberFormatException: Invalid int: "+00",但在Android 5.1中可以正确被转换(Java7新特性)。

欢迎补充及指正。

那些年Android开发中遇到的坑的更多相关文章

  1. 记录Android开发中遇到的坑

    1. 出现错误提示:Intel HAXM is required to run this AVD,VT-x is disabled in BIOS的解决办法. 点击SDK图标,安装Intel x86 ...

  2. Android开发需要注意的坑

    Android开发需要注意的坑一览​对于一些Android开发过程中坑爹.细小,但又重要的错误的总结​Android开发在路上:少去踩坑,多走捷径其他参考: ​google官方版本发布图 ​umeng ...

  3. android开发过程中遇到的坑

    在android的学习过程中,会有很多坑,我会把我遇到的,一一列下来,方便后来者查阅! 1:android-support-v4.jar and android-support-v7-appcompa ...

  4. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  5. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

  8. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  9. 怎样实现了捕获应用中的日志在android开发中

    怎样实现了捕获应用中的日志在android开发中,大家可研究一下. Process mLogcatProc = null; BufferedReader reader = null; try { mL ...

随机推荐

  1. Hibernate实体映射文件多对多等关系简单应用技巧

    认真开完以后,就能很简单的写出各种关系了 第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!- ...

  2. Android基于Retrofit2.0 +RxJava 封装的超好用的RetrofitClient工具类(六)

    csdn :码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51958010 RetrofitClient 基于Retrofit2 ...

  3. [ExtJS5学习笔记]第二十八节 sencha ext js 5.1.0发布版本正式发布 extjs doc下载地址

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/41911539 本文作者:sushengmiyan ------------------ ...

  4. iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge

    上一篇文章介绍了UIWebView 如何通过WebViewJavascriptBridge 来实现JS 与OC 的互相调用,这一篇来介绍一下WKWebView 又是如何通过WebViewJavascr ...

  5. antlr v4 使用指南连载5——如何编写词法定义

    如何编写词法定义        继上一篇文章,相信大家都明了编写词法规则的两个基本原则.那么接下来就可以开始编写词法文件了.对于计算机科学来说,很多词法规则是一致的.如标识符.数字等,它们都可以重复在 ...

  6. XML Schema

    XML Schema 是基于 XML 的 DTD 替代者. XML Schema 描述 XML 文档的结构. XML Schema 语言也称作 XMLSchema 定义(XML Schema Defi ...

  7. 手把手带你走进MVP +Dagger2 + DataBinding+ Rxjava+Retrofit 的世界

    0.0 Android开发现在的变化用一个词来形容就是 :翻天覆地 越来越多的项目使用了MVP + Rxjava+Retrofit +Dagger2 + DataBinding等等东西.. 但是这些东 ...

  8. 如何在Cocos2D 1.0 中掩饰一个精灵(四)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了完成需要的效果,我们将使用如下策略: 我们将首先绘制掩饰精灵 ...

  9. Android官方命令深入分析之bmgr

    作者:宋志辉 bmgr是一个可以跟Backup Manager进行交互的shell工具,要使用这个工具,Android设备API最小为8.它提供了备份和恢复操作的命令,所以你无需频繁的清除数据.这些命 ...

  10. 基于Qt的手机程序----口袋理财

    主页面 记账模块 制定目标 备忘录