首页>永佳见解>常州APP开发之缩短软件运行时间的有效方式
永佳动态 行业资讯 永佳见解 常见问题

常州APP开发之缩短软件运行时间的有效方式

更新时间:2021/1/29 14:13:30 作者:永佳软件

    "影响产品效率的每个问题(例如功耗或内存使用情况)都将影响该应用程序的成功。这就是为什么确保优化开发,平稳运行以及不会引起Android系统问题的重要原因。这里无需讨论有效的编程,因为我们不在乎您编写的代码是否可以承受测试。即使是高效的代码也需要花费时间才能运行。今天,在本文中,我们将讨论如何尽可能缩短运行时间,以及如何开发用户喜欢的应用程序。

    建议1:如何在后台取消一些线程操作

    我们知道,默认情况下,App运行过程中的所有操作都是在主线程(UI线程)中执行的,因此,App的响应速度将受到影响。它将导致程序卡住,死机甚至导致系统错误。

    为了加快响应速度,需要将耗时的操作(例如网络请求,数据库操作或复杂的计算)从主线程移动到单独的线程。一种更有效的方法是在类级别完成此操作,可以使用AsyncTask或IntentService创建后台操作。如果选择使用IntentService,它将在需要时启动,然后通过辅助线程处理请求(Intent)。

    使用IntentService时请注意以下限制:

    该类不应将信息传递给UI,如果要向用户显示处理结果信息,请使用Activity;

    一次只能处理一个请求;

    每个处理请求都不能中断。

    建议2:如何在没有ANR的情况下保持响应

    从UI线程中删除耗时的操作还可以防止用户操作出现在“系统不响应(ANR)”对话框中。需要做的是继承AsyncTask来创建后台工作线程并实现doInBackground()方法。

    另一种方法是自己创建一个Thread类或HandlerThread类。请注意,这也会降低应用程序的速度,因为默认线程优先级与主线程的优先级相同,除非您明确设置线程优先级。

    建议3:如何在线程中初始化查询操作

    当在后台处理查询操作时,显示数据不是即时的,但是您可以使用CursorLoader对象来加速它。该操作可以使活动和用户之间的交互不受影响。

    使用此对象后,您的App将初始化一个独立的后台线程供ContentProvider进行查询,查询结束后,它将把结果返回给调用该查询的Activity。

    建议4:其他需要注意的方面

    使用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任务时,请考虑在大量数学运算中使用低精度变量并缓存变量值。

    建议7:如何优化在前台运行的应用程序

    请确保使用寿命短,因为每个进程需要2MB的内存,并且在前台程序需要内存时将重新启动;

    保持内存使用量不要太大;

    如果您想每30分钟更新一次应用,请在设备醒着时进行更新;

    服务在拉动或睡眠状态下不好,这就是为什么在服务结束时使用AlarmManager或配置属性stopSelf()的原因。

    建议8:其他考虑

    在全面更新之前,请检查电池状态和网络状态,并等待状态更好以执行较大的更换操作;

    让用户在后台运行时查看功耗,例如更新周期。

    建议9:如何查找布局显示问题

    当我们为布局创建一个单独的UI时,我们正在创建一个滥用内存的应用程序,它将在UI中产生令人讨厌的延迟。为了实现流畅的低内存用户界面,

    第一步是搜索您的应用程序以查找潜在的瓶颈布局。使用AndroidSDK/tools/随附的HierarchyViewerTool。

    另一个很好的工具是Lint,它可以扫描应用程序源代码以查找可能的错误并优化控制结果。

    建议10:如何解决问题

    如果发现布局显示有问题,可以考虑简化布局结构。可以将LinearLayout类型转换为RelativeLayout类型,以减少布局的层次结构。

    更完美并不断优化

    尽管上述建议中的每一个似乎都是一个很小的改进,但是如果它可以成为您日常代码的一部分,那么您将看到意想不到的结果。让GooglePlay看到更出色,更流畅,更快,更省电的应用程序,并朝着Android的完美目标迈出一步。"