那些年Android开发中遇到的坑-阿里云开发者社区

开发者社区> 浩码农> 正文

那些年Android开发中遇到的坑

简介: 使用静态变量来缓存数据时,不管是在Application类还是其他类,都要注意因应用重建而引发的问题。 使用DecorView作为PopupWindow的anchorView时,在华为P7中它是显示在系统状态栏下方的(Android 5.1.1系统),在华为3C,三星S4,红米Note2(5.0.2)上表现正常。
+关注继续查看
  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新特性)。

欢迎补充及指正。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
6900 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4477 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
7748 0
windows server 2008阿里云ECS服务器安全设置
最近我们Sinesafe安全公司在为客户使用阿里云ecs服务器做安全的过程中,发现服务器基础安全性都没有做。为了为站长们提供更加有效的安全基础解决方案,我们Sinesafe将对阿里云服务器win2008 系统进行基础安全部署实战过程! 比较重要的几部分 1.
5455 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9423 0
腾讯云服务器 设置ngxin + fastdfs +tomcat 开机自启动
在tomcat中新建一个可以启动的 .sh 脚本文件 /usr/local/tomcat7/bin/ export JAVA_HOME=/usr/local/java/jdk7 export PATH=$JAVA_HOME/bin/:$PATH export CLASSPATH=.
2135 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,云吞铺子总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系统盘、创建快照、配置安全组等操作如何登录ECS云服务器控制台? 1、先登录到阿里云ECS服务器控制台 2、点击顶部的“控制台” 3、通过左侧栏,切换到“云服务器ECS”即可,如下图所示 通过ECS控制台的远程连接来登录到云服务器 阿里云ECS云服务器自带远程连接功能,使用该功能可以登录到云服务器,简单且方便,如下图:点击“远程连接”,第一次连接会自动生成6位数字密码,输入密码即可登录到云服务器上。
16807 0
+关注
浩码农
开源社区技术专家
167
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载