那些年Android开发中遇到的坑

  1. 使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题。
  2. 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在系统状态栏下方的(Android 5.1.1系统),在华为3C,三星S4,红米Note2(5.0.2)上表现正常。
  3. 裁剪图片并且以bitmap返回时,不要调用系统的功能,当图片过大时在米3当中将会导致系统的裁剪图片应用引发TransactionTooLargeException异常,并且不断重试,且需要重启手机才能恢复。
  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)上锁屏再解锁,下面的内容会少掉大约系统状态栏的高度的内容。非必现,但概率极高。
    那些年Android开发中遇到的坑_第1张图片

  12. 竖屏拍照时设置相机旋转,在手里的三星S4上拍的照还是横着的。
  13. 在酷派手机上,拍照时如果PreviewSize和PictureSize相差太大时,生成的图片的拍摄范围可能和预览的拍摄范围不一样(可能比预览的范围小)。
  14. 对一个Bitmap,调用Bitmap.create(xxx)方法创建一个新的bitmap,并设置到ImageView上,如果回收旧的bitmap,在手里的华为3C上,ImageView无法显示图片。

欢迎补充及指正。

你可能感兴趣的:(android,开发,Android开发,坑)