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. 第一个lucene程序,把一个信息写入到索引库中、根据关键词把对象从索引库中提取出来、lucene读写过程分析

    新建一个Java Project :LuceneTest 准备lucene的jar包,要加入的jar包至少有: 1)lucene-core-3.1.0.jar     (核心包) 2) lucene- ...

  2. android 获取SD卡的图片及其路径

    1.首先是intent的设置: private static final int IMAGECODE = 0; Intent imageIntent = new Intent(Intent.ACYIO ...

  3. (一一九)通过CALayer实现阴影、圆角、边框和3D变换

    在每个View上都有一个CALayer作为父图层,View的内容作为子层显示,通过layer的contents属性决定了要显示的内容,通过修改过layer的一些属性可以实现一些华丽的效果. [阴影和圆 ...

  4. UNIX网络编程——原始套接字SOCK_RAW

    实际上,我们常用的网络编程都是在应用层的报文的收发操作,也就是大多数程序员接触到的流式套接字(SOCK_STREAM)和数据包式套接字(SOCK_DGRAM).而这些数据包都是由系统提供的协议栈实现, ...

  5. Cocos2D中Action的进阶使用技巧(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都很清楚了,其实本身act ...

  6. 【一天一道LeetCode】#117. Populating Next Right Pointers in Each Node II

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Follow ...

  7. (NO.00003)iOS游戏简单的机器人投射游戏成形记(十七)

    现在玩家选择机器人后,可以在屏幕上或手臂上点击来移动robot's arm了. 但是玩家选择一个机器人后没有视觉效果来表明哪个机器人被选中.玩家做了一个操作后没有视觉反馈会惹恼强迫症用户滴 ;) 这篇 ...

  8. 通用数据水平层级选择控件v0.70升级版使其支持jQuery v1.9.1

    升级原因:作者原来脚本支持的jquery版本太低了,查找了下资料,使得它能支持最新版本的jquery 备注说明:脚本代码源作者跟源文出处很难找,只能在此特感谢他的分享. 更新部分: 1.新版本不再支持 ...

  9. FreeMarker 生成Java、mybatis文件

    FreeMarker 生成Java.mybatis文件 将mysql数据库表通过FreeMarker生成对应的Java文件和对应的mybatis文件. FreeMarker是一款模板引擎: 即一种基于 ...

  10. log4j的一些配置

    a). 新建Java Project>>新建package>>新建java类: b). import jar包(一个就够),这里我用的是log4j-1.2.14.jar, c) ...