zoukankan      html  css  js  c++  java
  • 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里面释放。

  • 相关阅读:
    code#5 P2 棋子
    code#5 P1 报告
    ztz11的noip模拟赛T3:评分系统
    20181101noip模拟赛T1
    20181031noip模拟赛T2
    20181031noip模拟赛T1
    Linux进程的五个段
    进程和线程有什么区别
    shell中if条件字符串、数字比对,[[ ]]和[ ]区别
    Python实现单例模式
  • 原文地址:https://www.cnblogs.com/xitang/p/3238424.html
Copyright © 2011-2022 走看看