如果你想做GooglePlay上最失败的案例,简单粗暴的方法就是开发一个界面极慢、耗电量、内存都极度消耗的APP。那么你就会得到无数用户的差评,没人会下载,没人会用。即使你的应用设计理念很好,也没关系。小编分享以下十条Android高效开发的建议:建议一:如何在后台取消某些线程的动作我们知道App运行过程中的所有操作默认都是在主线程(UI线程)进行的,所以App的响应速度会受到影响。会导致程序卡死、死机甚至导致系统错误。为了加快响应时间,有必要将耗时的操作(例如网络请求、数据库操作或复杂的计算)从主线程转移到单独的线程中。最有效的方法是在类级别,使用AsyncTask或IntentService创建后台操作。如果选择使用IntentService,它会在需要的时候启动,然后通过工作线程处理请求(Intent)。使用IntentService时需要注意以下限制:该类不向UI传递信息。如果要向用户显示处理结果信息,请使用Activity;一次只能处理一个请求;每个处理请求不能被中断;建议二:如何让响应不发生ANR从UI线程中去除耗时的操作这种方法也可以避免用户操作出现在SystemNotResponding(ANR)对话框中。您需要做的就是继承AsyncTask创建后台工作线程并实现doInBackground()方法。另一种方法是自己创建一个Thread类或HandlerThread类。需要注意的是,这也会让App变慢,因为默认的线程优先级和主线程优先级是一样的,除非你显式设置线程优先级。建议3:如何在线程中初始化查询操作当查询操作在后台处理时,显示数据不是即时的,但是可以使用CursorLoader对象来加速,这个操作可以使Activity之间的交互并且用户不受影响。使用该对象后,你的App会初始化一个独立的后台线程供ContentProvider进行查询,当查询完成后,会将结果返回给调用查询的Activity。建议四:其他需要注意的方面使用StrictMode检查UI线程中潜在的耗时操作;使用一些特殊的工具,如Systrace或Traceview来查找应用程序中的瓶颈;使用进度条向用户显示操作的进度;如果初始化很耗时,请显示欢迎屏幕。优化设备的电池寿命如果您的应用正在耗尽电池电量,请不要责怪用户卸载您的应用。电池使用方面,主要耗电情况如下:更新数据时频繁唤醒程序;使用EDGE或3G传输数据;转换文本数据并执行非JIT正则表达式操作。建议5:如何优化网络如果没有网络连接,请让您的应用跳过网络操作;仅在有网络连接且无漫游时更新数据;选择兼容的数据格式,发送包含文本数据和二进制数据的请求将所有请求转换为二进制数据格式;使用高效的转换工具,考虑多用流式转换工具,少用树形转换工具;为了更快的用户体验,请减少重复访问服务器;如果可能,请使用框架的GZIP库来压缩文本数据以有效利用CPU资源。建议六:如何优化应用的前端工作如果考虑使用wakelocks,尽量设置为最低;为防止潜在bug造成耗电,请指定超时时间;启用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,不会浪费电量;在DPI任务中使用DisplayMetrics时,请考虑在大量数学运算中使用低精度变量并缓存变量值;建议七:如何优化运行在前台的应用请保证服务的生命周期短,因为每个进程需要2MB内存,前台程序需要内存时会重启;保持内存使用量不要太大;如果您希望应用程序每30分钟更新一次,请在设备处于唤醒状态时执行;服务处于pull或sleep状态是不好的,这就是为什么需要在服务结束时使用AlarmManager或者配置属性stopSelf()。建议八:其他注意事项整体更新前检查电池状态和网络状态,等待最新状态进行大规模更换操作;让用户在后台运行时看到耗电量,比如更新周期;实现低内存UI建议#9:如何发现布局显示问题当我们为布局单元构建UI时,我们正在创建一个滥用内存并且在UI中存在严重延迟的应用程序。实现流畅、低内存UI的第一步是在您的应用中搜索潜在的瓶颈布局。使用AndroidSDK/tools/自带的HierarchyViewerTool工具。另一个很棒的工具是Lint,它会扫描应用程序的源代码以查找可能的错误并针对控制结果进行优化。建议十:如何解决问题如果发现布局显示结果有问题,可以考虑简化布局结构。可以将LinearLayout类型转换为RelativeLayout类型,以减少布局的层次结构。
