目录一、有效的线程1. 如何使用后台线程以避免前台负载过荷?2.如何避免应用不响应ANR?3. 如何在分离的线程中初始化查询?4.其他二、设备电池的优化5. 如何优化网络?6. 如何
如何让安卓程序在有限的内存和电池资源下流畅快速有效率的运行,下面给出了10种实践中的建议:
默认情况下,应用程序的所有操作都是在前台的主线程(UI线程)上运行的,应用程序响应能力可能会受到影响,会导致当机,死机,甚至系统错误。为了提升反应能力,应该将长时间运行的任务(如网络或数据库操作,复杂的计算)搬离应用程序的主线程,切换到以一个单独的后台线程方式运行。
完成这一切换任务的最有效方法是在类级别。您可以使用AsyncTask
类或IntentService
类来组织后台工作。一旦你实现了一个IntentService
,它会在需要的时候启动,使用新的一个工作线程处理请求(意图)。
当使用IntentService
,你应该考虑以下限制:
Activity
。为了避免应用程序长时间无应答ANR,将长任务操作从UI主线程卸载到后台线程运行,你可以通过继承AsyncTask
和实现 doInBackground()
方式来实现
另外一个方式是创建一个线程或HandlerThread
实现类,值得注意的是,你还需要规定线程的"后台" 线程权限,因为这个新线程缺省权限和UI线程是一样的,同样会拖慢整个应用运行速度。
数据显示并不是即时的,尽管你使用CursorLoader
对象可以加快提速,这个对象可以在不打扰用户和Activity
交互情况下,查询在后台进行。
使用这个对象武装你的应用,在对于每个ContentProvider
查询操作初始化一个单独的后台线程,然后只有在查询完成时将返回给Activity
。
StrictMode
探测UI线程中你要实现操作的潜在可能的长任务操作。Systrace
, Traceview
来发现你的应用中响应瓶颈。主要影响电池耗电时间有:
3G
和EDGE
的数据传递JIT
的正则表达式Wifi
可连接时更新。Stream
解析而不是树tree
解析器。GZIP
,充分利用CPU
资源。Bug
引起的电池消耗,使用timeout
,杜绝死循环。Android
:keepScreenOn
.XmlPullParserFactory
和 BitmapFactory
,对于正则使用Matcher.reset
(newString
) , 使用StringBuilder.setLength(0).
synchronization
,尽管它在被UI线程驱动时是安全的。ListView
中要多用循环利用策略,尽量多重用一个组件onPause
中一定要注销GPS更新,用户自己能在设置中激活GPSDisplayMetrics
执行DPI tasks with
.时,缓存计算结果。因为每个流程需要2M,当前台程序需要内存时需要重启,确保每个服务是短生命周期。
尽量使内存消耗低
设计应用每30分钟更新,但是只能在设备唤醒情况下。
服务Service
睡眠是不好的,应答使用AlarmManager
或<receiver>
这样manifest
元素,当完成时调用stopSelf()
,当启动服务时,使用AlarmManager
,使用*_WAKEUP
要注意,通过setInexactRepeating()
进行复位让安卓能包装你的应用更新,当使用<receiver>
时,动态地在manifest
中激活或失效其组件,特别是空操作情况下。
当你使用布局管理器创建页面时,你可能会引入一些延迟,为了实现平衡 内存消耗少的UI,你需要搜查布局中潜在的性能瓶颈,可以使用安卓SDK
目录<sdk>/tools/
下的Hierarchy Viewer
工具。
另外一个发现性能巍峨提的工具是Lint,它能扫描应用源码中层次寻找Bug
。
10. 如何解决性能问题?
你可以通过压扁层次比如通过从LinearLayout
类转换到使用RelativeLayout
类,压低层次水平。
到此这篇关于10种提升android
运行效率的建议的文章就介绍到这了,更多相关提升android
运行效率的建议内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: 10种提升android运行效率的建议
本文链接: https://lsjlt.com/news/156435.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0