提升安卓运行效率的建议

如何让安卓程序在有限的内存和电池资源下流畅快速有效率的运行,下面给出了10种实践中的建议:

有效的线程

1. 如何使用后台线程以避免前台负载过荷?

默认情况下,应用程序的所有操作都是在前台的主线程(UI线程)上运行的,应用程序响应能力可能会受到影响,会导致当机,死机,甚至系统错误。为了提升反应能力,应该将长时间运行的任务(如网络或数据库操作,复杂的计算)搬离应用程序的主线程,切换到以一个单独的后台线程方式运行。

完成这一切换任务的最有效方法是在类级别。您可以使用AsyncTask类或IntentService类??来组织后台工作。一旦你实现了一个IntentService,它会在需要的时候启动,使用新的一个工作线程处理请求(意图)。

当使用IntentService,你应该考虑以下限制:

  • 这个类没有把结果送给UI,所以为了显示结果,需要使用Activity。
  • 一次只有一个请求被处理。
  • 任何请求处理不能中断。

2.如何避免应用不响应ANR?

为了避免应用程序长时间无应答ANR,将长任务操作从UI主线程卸载到后台线程运行,你可以通过继承AsyncTask 和实现 doInBackground() 方式来实现

另外一个方式是创建一个线程或HandlerThread 实现类,值得注意的是,你还需要规定线程的"后台" 线程权限,因为这个新线程缺省权限和UI线程是一样的,同样会拖慢整个应用运行速度。

3. 如何在分离的线程中初始化查询?

数据显示并不是即时的,尽管你使用CursorLoader 对象可以加快提速,这个对象可以在不打扰用户和Activity交互情况下,查询在后台进行。

使用这个对象武装你的应用,在对于每个ContentProvider 查询操作初始化一个单独的后台线程,然后只有在查询完成时将返回给Activity。

4.其他:

  • 使用StrictMode 探测UI线程中你要实现操作的潜在可能的长任务操作。
  • 使用特殊工具,如Systrace, Traceview来发现你的应用中响应瓶颈。
  • 显示操作进程图标
  • 如果初始安装非常耗时,显示启动画面。

设备电池的优化

主要影响电池耗电时间有:

  • 定期的唤醒更新
  • 通过3G和EDGE的数据传递
  • 文本数据解析 没有JIT的正则表达式

5. 如何优化网络?

  • 如果没有连接,停止你的应用操作,只有3G或Wifi可连接时更新。
  • 选择压缩数据,比如将文本和二进制数据打包在一个请求中。
  • 使用有效率的解析器,使用流Stream解析而不是树tree解析器。
  • 减少与服务器的往返时间次数
  • 有可能对文本数据使用GZIP,充分利用CPU资源。

6. 如何优化前台应用?

  • 当设计唤醒锁时,请尽可能设置最低级别。
  • 避免潜在的Bug引起的电池消耗,使用timeout,杜绝死循环。
  • 激活android:keepScreenOn.
  • 考虑手动让GC垃圾回收Java对象,如XmlPullParserFactory 和 BitmapFactory,对于正则使用Matcher.reset(newString) , 使用StringBuilder.setLength(0).
  • 小心同步操作synchronization ,尽管它在被UI线程驱动时是安全的。
  • 在ListView中要多用循环利用策略,尽量多重用一个组件
  • 尽可能使用网络定位而不是GPS,
  • 在onPause中一定要注销GPS更新,用户自己能在设置中激活GPS
  • 计算浮点需要很多电池,你也许要考虑地理数学等方面的精度,当在使用DisplayMetrics执行DPI tasks with .时,缓存计算结果。

7.如何优化后台运行的应用?

  • 因为每个进程需要2M,当前台程序需要内存时需要重启,确保每个服务是短生命周期。
  • 尽量使内存消耗低
  • 设计应用每30分钟更新,但是只能在设备唤醒情况下。
  • 服务Service睡眠是不好的,应答使用AlarmManager或<receiver>这样manifest元素,当完成时调用stopSelf() ,当启动服务时,使用AlarmManager,使用*_WAKEUP要注意,通过setInexactRepeating()进行复位让安卓能包装你的应用更新,当使用<receiver>时,动态地在manifest中激活或失效其组件,特别是空操作情况下。

8. 其他:

  • 在进行一个完整更新之前,检查电池和网络状态,进行批量处理时要等待电池较好的状态
  • 提供用户电池使用情况的可选项,以决定更新周期和后台行为。

使用最少内存实现UI

9. 如何分辨出布局性能问题?

当你使用布局管理器创建页面时,你可能会引入一些延迟,为了实现平衡 内存消耗少的UI,你需要搜查布局中潜在的性能瓶颈,可以使用安卓SDK目录<sdk>/tools/下的Hierarchy Viewer 工具。

另外一个发现性能巍峨提的工具是Lint,它能扫描应用源码中层次寻找Bug。

10. 如何解决性能问题?

你可以通过压扁层次比如通过从LinearLayout 类转换到使用RelativeLayout类,压低层次水平。

时间: 2024-11-05 16:32:16

提升安卓运行效率的建议的相关文章

提升ListView运行效率两个方法

一.首先我们先实现ListView的构建工作 1.定义一个实体类,作为ListView适配器的适配类型.新建Fruit类,代码如下: package org.lxh.demo; public class Fruit { private String name; private int imageId; public Fruit(String name, int imageId) { this.name = name; this.imageId = imageId; } public String

初识ListView - 定制ListView - 提升ListView运行效率

ListView绝对可以称得上是 Android 中最常用的控件之一,几乎所有的应用程序都会用到它.由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有大量的数据需要展示的时候,就可以借助 ListView来实现.ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕.相信你其实每天都在使用这个控件,比如查看手机联系人列表,翻阅微博的最新消息等等.不过比起前面介绍的几种控件,ListView的用法也相对复杂了很多.

安卓AVD使用建议

问题描述:之前在安装了Android开发环境后,一开始并没有直接在Android手机和平板上进行调试,是使用的AVD模拟器工具.由于电脑的配置不是特别好,总感觉AVD的使用速度太慢,包括启动的时候还有用户UI操作的时候.现在做小的测试时都是直接在Android设备上进行的,建议直接用Android设备,因为在AVD中碰不到的问题很可能会在设备调试时出现,而且最终程序还是要在Android设备上使用的. AVD的创建和使用:AVD创建和使用很简单,在ADT工具的菜单栏中有AVD的图标,点击就可以进

暑期自我提升的10条建议

炎炎夏天,遥问相安,几条建议: 1. 不要围着手机.电脑转,不要被娱乐.冥思独处,安静平和. 2. 系统读4本书,写下1w字以上书评.上坡路总是要用力的,下坡路才不费劲. 3. 走一走,旅游一次.充实的睡眠,规律的运动.少吃多动. 4.坚持早起,运动或者听佛乐,放开思虑,寻找心灵的宁静. 5.看一部记录片,西方的生物.科学等,不要中国的吃喝玩乐相关. 6.追踪一次社会事件,前后起因.当事人.不同立场人员的不同观点等. 7.陪父母长辈聊聊.聚聚,了解自己家族的成长. 8.建议是小,充实是真.不能鼓

趋势发现支付宝安卓版漏洞 建议尽快更新至最新版

  近期,趋势科技发现支付宝Android应用程序上有两个漏洞,可被攻击者用来进行网络钓鱼(Phishing)攻击以窃取支付宝认证信息. 第一个漏洞:输出组件Activity Android应用程序有几个重要的组件,当中之中的一个是Activity(Activity是Android组件中最基本也是最为常见用的四大组件之中的一个). Activity有一个重要的属性,android:exported.假设此属性设定为「true」时,安装在同一Android设备上的每一个应用程序都能够调用这个组件(

JAVA性能优化:35个小细节让你提升java代码的运行效率

代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了. 代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化的目标是 减小代

独家分析:安卓“Janus”漏洞的产生原理及利用过程

近日,Google在12月发布的安卓系统安全公告中披露了一个名为"Janus"安卓漏洞(漏洞编号:CVE-2017-13156).该漏洞可以让攻击者绕过安卓系统的signature scheme V1签名机制,进而直接对App进行篡改.而且由于安卓系统的其他安全机制也是建立在签名和校验基础之上,该漏洞相当于绕过了安卓系统的整个安全机制. 一旦攻击者将植入恶意代码的仿冒的App投放到安卓商店等第三方应用市场,就可替代原有的App做下载.更新.网友安装这些仿冒App后,不仅会泄露个人账号.

关于Java代码优化的35条建议

代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了.代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨:但是如果有足够的时间开发.维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的. 代码优化的目标是: 1.减

关于Java代码优化的44条建议!

关于Java代码优化的N条建议! 本文是作者:五月的仓颉 结合自己的工作和平时学习的体验重新谈一下为什么要进行代码优化.在修改之前,作者的说法是这样的: 就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对于提升代码的运行效率就很有用了. 这个观点,在现在看来,是要进行代码优化的一个原因,但不全对.在机械工艺发展的今天,服务器动辄8核.16核,64位