Android优化相关总结

1. 避免用Intent传递量大的数据,可能导致 OOM,可考虑用EventBus代替。
2. 持久化的存储建议在Activity#onPause()/onStop()。
3. 广播仅限于应用内,可用 LocalBroadcastManager来进行注册和发送(避免广播泄漏以及广播被拦截等安全问题)。
–LocalBroadcastManager.getInstance(context).sendBroadcast(intent)
–LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter)
4. 避免在
–Service#onStartCommand()/onBind()中执行耗时操作
–BroadcastReceiver#onReceive()中执行耗时操作
–Service 需要多线程来并发处理多个启动请求,Service一般运行在主线程,应避免耗时操作
可用IntentService代替:
–IntentService是Service子类,会创建一个独立的worker线程,任务完成后会自动停止
5. 当前 Activity 的 onPause() 方法执行结束后才会创建(onCreate)或恢复(onRestart)别的 Activity,所以在 onPause() 方法中不易做耗时较长的工作。
6. 如果使用了 Intent.parseUri函数,获取的 intent 必须严格过滤。
7. 禁止在设计布局时多次为子 View 和父 View 设置同样背景进而造成页面过度绘制,推荐将不需要显示的布局进行及时隐藏。
8. 尽量不要使用 AnimationDrawable,它在初始化的时候就将所有图片加载到内存中,特别占内存,并且还不能释放,释放之后下次进入再次加载时会报错。
9. 不能使用 ScrollView 包裹 ListView/GridView/ExpandableListVIew;因为这样会把 ListView 的所有 Item 都加载到内存中,要消耗巨大的内存和 cpu 去绘制图面。推荐使用 NestedScrollView。
10. 不要在 Android 的 Application 对象中缓存数据。基础组件之间的数据共享用 Intent 等机制, SharedPreferences 等数据持久化机制 。
11. 用 Toast 时,建议定义一个全局的 Toast 对象,可避免连续显示Toast 时不能取消上一次 Toast 的消息,即使需要连续弹出 Toast,也应避免直接调用 Toast#makeText。
12. 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的( 设置线程存活时间(setKeepAliveTime)确保空闲时线程能被释放),这样的处理方式能更加明确线程池的运行规则,规避资源耗尽的风险。
13. 禁止在多线程之间用SharedPrefences,虽然可以(MODE_MULTI_PROCESS),但官方已不推荐。
14. 任何时候不要硬编码文件路径,使用 Android 文件系统 API 进行访问。使用外部存储时,必须检查外部存储的可用性。
15. SharedPreference提交数据时,尽量使用Editor#apply(),仅当需要确定提交结果时用commit()
16. png 图片使用 TinyPNG 或者类似工具压缩处理,减少包体积。
17. 在 Activity#onPause()或 Activity#onStop()回调中,关闭当前 activity 正在执行的的动画。
18. 大图片资源不要直接打包到 apk,可以考虑通过文件仓库远程下载,减小包体积。
19. 当 View Animation 执行结束时,调用 View.clearAnimation()释放相关资源。
20. 将 android:allowbackup 属性必须设置为 false,阻止应用数据被导出。
21. Android基本组件(Activity、Service、BroadcastReceive、ContentProvider 等)不应在没有严格权限控制的情况下,将android:exported 设置为 true。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值