1、资源包图片尽量控制在50k以内,否则可能读取失败

2、资源图片建议使用png格式,此格式在android系统上支持最好。对于jpeg和gif格式的图片,在android4.0以后版本,通过系统自缩放后,无法转码为565格式,只能使用默认格式

3、adapter的数据发生变化后,必须调用notify接口通知。

4、ui界面使用的数据,不能在子线程中修改。

5、网络需要考虑中国移动互联网的特点,需要考虑2g,3g,wifi,net,wap。网络接口必须设置超时时间,否则可能造成内存泄露

6、页面退出时,与页面相关的网络请求必须关闭,否则会造成流量浪费,还会造成内存释放不及时,和网络请求回调返回时页面已经关闭,造成crash

7、页面退出时,关闭与页面相关的定时器(尤其是循环定时器)、动画等。否则会造成内存泄露或crash

8、如果页面需要复杂手势的支持,需要考虑电阻屏兼容性。

9、手机屏幕密度各不相同,尺寸也各不相同,设备独立像素(dip)也不相同,虽然大多数手机是(320*480dip)。切图标注不能标注总长或者总宽,应该标注边距,内容区自适配。

10、服务器返回的数据必须判断真伪。对于服务器返回的数据,必须保持不可信的态度,保持代码健壮性。

11、整型溢出异常。对于服务器返回的id之类的数据,如果没有特殊的含义,必须转换成string使用。

12、防止数据库死锁。多线程使用同一句柄访问。多进程使用进程通信方式访问,如:content provider

13、读写磁盘需要判断sd卡是否存在

14、android平台内存限制严格,超过上限报OOM异常,此异常无法捕获。常用内存上限有16M,32M,64M,128M等,开发具体功能一定要考虑内存占用量,及时回收,对于不同内存的手机可以采用不同的策略。

15、SharedPreferences同一key不能写不同的数据类型,否则会crash,建议对于key统一管理,下线功能的key不要删除,防止被重复使用,造成升级用户crash。

16、改造账号系统一定要关注是否会影响易平台用户,做好兼容性

17、对于使用的第三方库,做好云控制,需要通知QA同学测试云开关。调用的第三方接口,尽量尝试捕获异常,保证app不要crash

18、产出必测list,提供给QA同学,上线前必测list必须逐条回归,防止发出去的app失去控制。

19、自定义控件需要考虑生命周期,这点经常被遗漏,会造成内存泄露

20、不要过多占用rom空间缓存数据,因为rom空间相对较小,大多数app都默认安装在rom,如缓存过多数据在rom,会造成用户无法安装其他app。建议rom只缓存重要数据。

21、对于支持多皮肤的app,资源分配极端情况下会double,需要额外关注大图片的释放时机。

22、通过调整alpha值做的夜间模式效果,并不是所有手机都适合

23、调用某些系统接口,需要考虑深度定制机的修改。如拉起系统设置界面,某些定制机对系统界面的调用方法做了修改,直接按照系统方法调用会crash,应该捕获异常,如出现异常提示用户手动设置。

24、传感器的使用。因android手机硬件的多样性。传感器灵敏程度,采样频率等各不相同,需要考虑兼容性。

25、部分界面需要考虑横竖屏切换,根据具体场景,确定切换策略。

26、android虚拟键盘多样性,根据父窗口获得的键盘高度并不准确,尽量把输入窗口往上提,防止被虚拟键盘遮挡。

27、webview不支持自动检测网络切换,网络切换后需要通知webview网络已切换。

28、多线程处理容易忽略内存使用,对于使用内存较多的线程,需要app控制串行执行或者控制内存占用。如下载gif图片,如果开5个线程同时下载不同的gif图片,每个图片2M以上,会直接crash

29、重视版本兼容性问题,对于升级用户,特别是跳跃式升级用户(如从1.1直接升级到3.0),需要兼容老版本的数据,特别是数据缓存和桌面快捷方式。

30、系统的异步任务AsyncTask,如果声明了targetSdkVersion小于等于12或者minSdkVersion小于等于12,即android3.1版本以上AsyncTask的默认行为是串行。

31、图片处理之后,如果差异性不大(如缩放比例接近1.0),有可能还是返回处理之前的图片引用,如果此时释放原始图片,处理后的图片也被释放了,是recycled状态,此时再使用这张图片,会crash

32、耗内存的操作(大图片处理,webview,视频播放等等),应该提取出来,放在单独的进程中运行,防止主进程内存被耗尽而crash

33、JNI包应该编译不同处理器的so文件(主要是arm,mips,x86),防止不兼容处理器而crash。

34、资源包的raw目录是不压缩目录,一些无需压缩的文件可以放在此目录。特别是声音文件,如果再次压缩在某些机型无法播放。

35、不要过度相信后台service,在某些机型上或者某些管理软件,后台service的进程有可能被回收。

36、java.lang.Thread创建以后必须调用start(),否则内存泄露。就算Thead变量是方法里面的临时变量也必须调用start,否则就会内存泄露。 调用run方法什么的都没用,必须start方法。原因是Thread在创建时,分加入到ThreadGroup中,group是全局的,所有Thread的引用会直接保存不会被释放掉。只有start调用,系统走完自己的run回调流程,才会从group里面释放。

android小细节的更多相关文章

  1. Android小项目之八 界面细节

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...

  2. 关于 Unity 的一些小细节,不注意可能会被“坑”一些时间。

    关于 Unity 的一些小细节,不注意可能会被"坑"一些时间. 最近因为一些"小"问题,总是需要找很久的原因,总结一下 UnityEngine.Input 在使 ...

  3. react 移动端 兼容性问题和一些小细节

    react 移动端 兼容性问题和一些小细节 使用 ES6 的浏览器兼容性问题 react 对低版本的安卓webview 兼容性 iOS下 fixed与软键盘的问题 onClick 阻止冒泡 meta对 ...

  4. Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段

    在上一篇 "管理沙盒(定制化)小细节1" 的随笔中,我们使用公式法在 "业务机会" 对象(单头)上建立了 "利润合计" 字段,并将它等于 & ...

  5. Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面

    Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...

  6. Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)

    在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...

  7. Oracle Sales Cloud:报告和分析(BIEE)小细节1——创建双提示并建立关联(例如,部门和子部门提示)

    Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的客户商机管理系统,通过提供丰富的功能来帮助提高销售效率,更好地去了解客户,发现和追踪商机,为最终的销售成交 (d ...

  8. php课程---Json格式规范需要注意的小细节

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...

  9. ASP.NET MVC 自定义路由中几个需要注意的小细节

    本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...

随机推荐

  1. 计时器Chronometer和时钟(AnalogClock和DigitalClock)

    计时器Chronometer和时钟(AnalogClock和DigitalClock) (1)Android提供了两个时钟组件:AnalogClock和DigitalClock,DigitalCloc ...

  2. PIP安装Python的scipy,scrapy等包出现“failed building wheel for xxx”问题解决办法

    1.在这里下载对应的.whl文件,注意别改文件名! http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml Ctrl + F,输入lxml,找到下面这段 Lxm ...

  3. HTML 打印 javascript连续打印 分页

    page-break-after属性介绍:http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp <div style=& ...

  4. CSharp 如何通过拼接XML调用存储过程来查询数据

    每查询数据,需要访问一次数据库,这样会影响性能:如果把查询的数据拼接成XML形式,作为一个参数整体传给存储过程来处理,这只访问数据库一次,执行速度会快很多. 1.C#代码如下: /// <sum ...

  5. Android Studio--学习系列(1)

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...

  6. Angular学习(7)- 模板2

    示例: <!DOCTYPE html> <html ng-app="MyApp"> <head> <title>Study 8< ...

  7. nokia5230 出厂设置

    你手机sim卡里的电话没事,还有储存卡里都没事,这个只是针对手机内存,如果不放心,拿你不用的手机卡,拔了内存卡格式化你好,我来具体说说吧首先如果你要单一恢复出厂设置,代码是输入*#7780#密码没改是 ...

  8. vmware 没挂载光盘解决方案

    一定要选中上方的'已连接'

  9. oracle 10G以上版本 树形查询新加的几个功能

    1.判断当前节点是否叶子节点 在 Oracle 10g 中,还有其他更多关于层次查询的新特性 .例如,有的时候用户更关心的是每个层次分支中等级最低的内容.那么你就可以利用伪列函数CONNECT_BY_ ...

  10. Navicat 11使用技巧

    入门 Navicat 是一个可多重连接的数据库管理工具,它可让你连接到 MySQL.Oracle.PostgreSQL.SQLite.SQL Server 和/或 MariaDB 数据库,让管理不同类 ...