android小细节
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小细节的更多相关文章
- Android小项目之八 界面细节
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 按惯例,写在前面的:可能在学习Android的过程中,大家会和我一样,学习过大量的基础知识,很多的知识点 ...
- 关于 Unity 的一些小细节,不注意可能会被“坑”一些时间。
关于 Unity 的一些小细节,不注意可能会被"坑"一些时间. 最近因为一些"小"问题,总是需要找很久的原因,总结一下 UnityEngine.Input 在使 ...
- react 移动端 兼容性问题和一些小细节
react 移动端 兼容性问题和一些小细节 使用 ES6 的浏览器兼容性问题 react 对低版本的安卓webview 兼容性 iOS下 fixed与软键盘的问题 onClick 阻止冒泡 meta对 ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节2——使用对象触发器更新数字字段
在上一篇 "管理沙盒(定制化)小细节1" 的随笔中,我们使用公式法在 "业务机会" 对象(单头)上建立了 "利润合计" 字段,并将它等于 & ...
- Oracle Sales Cloud:管理沙盒(定制化)小细节1——利用公式创建字段并显示在前端页面
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的CRM管理系统.由于 Oracle 销售云是基于 Oracle 云环境的,它与传统的管理系统相比,显著特点之一便 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节2——利用变量和过滤器传参(例如,根据提示展示不同部门的数据)
在上一篇随笔中,我们建立了部门和子部门的双提示,并将部门和子部门做了关联.那么,本篇随笔我们重点介绍利用建好的双提示进行传参. 在操作之前,我们来看一个报告和分析的具体需求: [1] 两个有关联的提示 ...
- Oracle Sales Cloud:报告和分析(BIEE)小细节1——创建双提示并建立关联(例如,部门和子部门提示)
Oracle Sales Cloud(Oracle 销售云)是一套基于Oracle云端的客户商机管理系统,通过提供丰富的功能来帮助提高销售效率,更好地去了解客户,发现和追踪商机,为最终的销售成交 (d ...
- php课程---Json格式规范需要注意的小细节
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Programming Lan ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
随机推荐
- 内联样式自动出现,一般是js控制写入的
内联样式自动出现,一般是js控制写入的
- officetohtml
http://blog.csdn.net/mcpang/article/details/6817643
- Pop Sequence
题目来源:PTA02-线性结构3 Pop Sequence (25分) Question:Given a stack which can keep M numbers at most. Push ...
- 【linux】linux创建用户并授予sudo权限
1. 新建用户 root@ubuntu:~# adduser hadoop root@ubuntu:~# passwd hadoop #为hadoop用户设置密码 2. 为hadoop用户添加sudo ...
- windows7使用Source insight上远程修改ubuntu共享内核源码
由于本人阅读喜欢使用source insight.前段时间接触了linux核代码,而这份代码只能放在ubuntu服务器上编译,刚开始的时候是在windows上修改,完了之后再copy到服务器上去编译, ...
- [linux basic 基础]----同步信号量
直接使用一个共享变量,来是两个线程之间进行切换是非常笨拙而且没有效率的:信号量--互斥量--这两者是相互通过对方来实现的:比如,如果想控制某一时刻只有一个线程可以访问一些共享内存,使用互斥量要自然一些 ...
- 【转】VS2013 C#WinForm程序构造界面拖动控件NumericUpDown时"未响应“是有道词典惹的祸
很久之前遇到过因为金山词霸和其他软件冲突导致的程序无响应的情况. 没想到今天情况重现,VS2013在可视化编辑NumbericUpDown控件的时候,又出现了”未响应“,发现又是有道词典惹的祸. 可见 ...
- working copy locked 问题
解法 1 : 右键svn-->clean up 解法 2 : 被lock的文件夹进入控制台 del lock /q/s [转载解法] SVN 本地更新时,由于一些操作中断更新,如磁盘空间不够 ...
- [实变函数]3.2 可测集 (measurable set)
1 $\bbR^n$ 中集合 $E$ 称为可测的 (measurable), 如果 $$\bee\label{3.2:Caratheodory} m^*T=m^*(T\cap E)+m^*(T\cap ...
- 在单线程中你最好使用ArrayList而不是Vector
<java核心技术卷一>571页上提到Vector类的所有方法都是同步的.可以由两个线程安全地访问同一个Vector对象.显然,如果可以确定我们不会在多个线程中对这个数组进行操作的话,我们 ...