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. Spring的DataSource配置、将Hibernate配置全部写到Spring配置

    DataSource可以集中管理数据库连接,减少维护工作量,使部署更简单: Spring的DataSource配置:(Spring数据源配置)这里使用dbcp,还有很多其他的如c3p0,jdbc,jn ...

  2. SQL Server 执行计划操作符详解(2)——串联(Concatenation )

    本文接上文:SQL Server 执行计划操作符详解(1)--断言(Assert) 前言: 根据计划,本文开始讲述另外一个操作符串联(Concatenation),读者可以根据这个词(中英文均可)先幻 ...

  3. GC垃圾回收算法

    什么是GC垃圾回收呢.日常生活中我们去餐厅吃饭吃完饭,吃完饭走了餐具不用管,服务员在把餐具拿走,这是一种方式,服务员怎么知道他要来把餐具拿走呢,因为你走了,这个位置空了.服务员什么时候拿走餐具很重要, ...

  4. 5.关于QT中的网络编程,QTcpSocket,QUdpSocket

     1 新建一个项目:TCPServer.pro A  修改TCPServer.pro,注意:如果是想使用网络库,需要加上network SOURCES += \ TcpServer.cpp \ T ...

  5. Linux的sleep()和usleep()

    1.sleep和usleep都是linux中的程序挂起函数.只是时间的单位不一样. 2. sleep的基本单位是s(秒),也可以用m(分).h(小时). 例: sleep 1 : 挂起1秒 sleep ...

  6. C语言一个双向链表的实现

    首先编写头文件,头文件里做相关的定义和声明,DList.h内容如下: #ifndef DList_H #define DList_H typedef int Item; typedef struct ...

  7. 05 利用Appliction 传值Activity

    步骤一:新建一个类继承Application必须是public class 不然直接奔溃 步骤二:在清单文件AndroidManifest.xml的application添加name属性 值为com. ...

  8. 如何使用EasyUI显示表格界面

    还记得前面有篇博客叫---使用TT模板+mvc+wcf实现简单查询,这篇博文的末尾,小编贴了一张查询出来的结果图,那么这篇博客的中新来了,如何使用EasyUI显示出表格样式的界面,以前学习CS的时候, ...

  9. 《java入门第一季》之HashSet小案例:获取10个1至20的随机数,要求随机数不能重复

    这是基于HashSet集合的唯一性. /*  * 编写一个程序,获取10个1至20的随机数,要求随机数不能重复.  *   * 分析:  * A:创建随机数对象  * B:创建一个HashSet集合 ...

  10. EBS预置文件作用收集整理

    在EBS之中,有很多的配置选项(profile),系统管理员只需要对它们做一些简单的配置,就可以达到控制流程开关.安全访问.个人喜好等等方面的要求. 以HR: Security Profile为例,该 ...