每一个影响产品效率的问题,例如功耗或内存使用,都会影响App的成功。这就是为什么确保您的开发得到优化、运行顺利并且不会给Android 系统带来问题至关重要。这里没有必要讨论高效编程,因为我们不关心你写的代码是否经得起测试。即使高效的代码也需要时间来运行。今天这篇文章,我们就来聊聊如何尽可能的缩短运行时间,如何开发一款用户喜欢的app。
高效使用线程
建议1:如何取消后台某些线程中的操作
我们知道App运行过程中的所有操作默认都是在主线程(UI线程)中进行的,因此App的响应速度会受到影响。它会导致程序死机、死机,甚至引起系统错误。
为了加快响应时间,需要将耗时的操作(例如网络请求、数据库操作或复杂的计算)从主线程移至单独的线程。更高效的方式是在类层面完成这个操作。您可以使用AsyncTask 或IntentService 创建后台操作。如果选择使用IntentService,它将在需要时启动,然后通过工作线程处理请求(Intent)。
使用IntentService时需要注意以下限制:
此类不应将信息传递给UI。如果想向用户显示处理结果信息,请使用Activity;
一次只能处理一个请求;
每个请求处理过程都不能被中断。
建议2:如何保持ANR的响应
从UI 线程中删除耗时的操作还可以防止用户操作导致系统无响应(ANR) 对话框。您需要做的就是继承AsyncTask 创建后台工作线程并实现doInBackground() 方法。
另一种方法是自己创建Thread类或HandlerThread类。请注意,这也会减慢应用程序的速度,因为默认线程优先级与主线程的优先级相同,除非您显式设置线程的优先级。
建议3:如何在线程中初始化查询操作
当查询操作在后台处理时,显示数据不是瞬时的,但您可以使用CursorLoader 对象来加速该过程。该操作使得Activity和用户之间的交互不受影响。
使用这个对象后,你的App会初始化一个独立的后台线程供ContentProvider进行查询,当查询完成后,将结果返回给调用查询的Activity。
建议四:其他需要注意的方面
使用StrictMode 检查UI 线程中是否存在潜在的耗时操作;
使用Systrace 或Traceview 等特殊工具来查找应用程序中的瓶颈;
使用进度条向用户展示操作的进度;
如果初始化很耗时,请显示欢迎屏幕。
优化设备的电池寿命
如果您的应用正在耗尽电池电量,请不要责怪用户卸载您的应用。对于电池使用,主要功耗如下:
更新数据时频繁唤醒程序;
使用EDGE或3G传输数据;
文本数据转换、非JIT正则表达式操作。
建议五:如何优化网络
如果没有网络连接,请让您的应用程序跳过网络操作;仅在有网络连接且无漫游时更新数据;
选择兼容的数据格式,将所有包含文本数据和二进制数据的请求转换为二进制数据格式请求;
使用高效的转换工具,考虑多使用流式转换工具,少用树形转换工具;
为了更快的用户体验,请减少对服务器的重复访问;
如果可能,请使用框架的GZIP 库来压缩文本数据,以有效利用CPU 资源。
建议6:如何优化应用程序在前端的工作
如果您考虑使用唤醒锁,请尝试将其设置为较小的级别;
为防止潜在错误导致电池消耗,请明确指定超时时间;
启用android:keepScreenOn 属性;
除了系统GC操作外,还可以考虑手动回收Java对象,例如XmlPullParserFactory和BitmapFactory。还有正则表达式Matcher.reset(newString)操作和StringBuilder.setLength(0)操作;
注意同步问题,尽管在主线程中是安全的;
在Listview中使用更多的复用策略;
如果可能,请使用粗略的网络定位而不是GPS。相比之下,GPS需要1mAh(25s*140mA),而一般网络仅使用0.1mAh(2s*180mA);
确保注销GPS 位置更新操作,因为此更新操作也会在onPause() 中继续。当所有应用程序都退出此操作后,用户可以在系统设置中重新启用GPS,而不浪费电量;
考虑在繁重的数学运算中使用低精度变量,并在使用DisplayMetrics 执行DPI 任务时缓存变量值。
建议七:如何优化前台应用程序
请确保服务生命周期是短暂的,因为每个进程需要2MB内存,前台程序需要内存时会重新启动;
保持内存占用不要太大;
如果您希望应用程序每30 分钟更新一次,请在设备唤醒时执行此操作;
Service处于pull或sleep状态是不好的,这就是为什么在服务结束时应该使用AlarmManager或配置属性stopSelf()。
建议8:其他预防措施
进行整体更新前检查电池状态和网络状态,等待更好的状态后再进行大规模更换操作;
让用户查看电量使用情况,例如更新周期和后台操作。
建议9:如何查找布局显示问题
当我们为布局单独创建UI 时,我们正在创建一个内存滥用的应用程序,这将导致UI 中出现严重的延迟。实现流畅、低内存UI 的第一步是在应用程序中搜索潜在的瓶颈布局。使用AndroidSDK/tools/自带的HierarchyViewerTool工具。
另一个不错的工具是Lint,它会扫描应用程序的源代码以查找可能的错误并优化控制结果。
提示10:如何解决问题
如果发现布局显示结果有问题,可以考虑简化布局结构。您可以将LinearLayout类型转换为RelativeLayout类型以减少布局层次结构。
更加完善,不断优化
尽管上面的每一条建议看起来都只是小小的改进,但如果它成为你日常代码的一部分,你会看到意想不到的结果。让Google Play看到更多优秀、流畅、更快、更省电的应用,距离Android完美的目标又近了一步。
文章转载请联系作者并注明出处:https://www.mlsxcxkf.com/news/1178.html