![android](https://i-blog.csdnimg.cn/blog_migrate/056280d944b5ce2d0d31d5200628bd8d.png)
android
如果您的应用程序执行许多耗时的操作,则可以使用以下技巧来提高性能并为用户提供更好的体验。
- 可能需要很长时间的操作应该在自己的线程上运行,而不是在主(UI)线程中运行。 如果某个操作在主线程上运行时花费的时间太长,则Android操作系统可能会显示“应用程序无响应”(ANR)对话框:从那里,用户可以选择等待或关闭您的应用程序。 此消息不是非常用户友好,您的应用程序永远不应有触发它的机会。 尤其是,对外部API的Web服务调用对此特别敏感,应始终在其自己的线程上,因为网络速度变慢或其端的问题可能触发ANR,从而阻止了应用程序的执行。 您还可以利用线程的优势来预先计算稍后在主线程上显示的图形。
- 如果您的应用程序需要大量调用外部API,请避免在wifi和蜂窝网络不可用的情况下反复发送调用。 准备整个请求,将其发送出去并在肯定会失败时等待超时是浪费资源的。 您可以定期合并连接的状态,如果没有可用的网络,则切换为脱机模式,并在网络恢复后立即将其重新激活。
- 利用缓存来减少昂贵操作的影响。 较长的计算但结果不会更改或将被重用的图形可以保存在内存中。 您还可以将对外部API的调用结果缓存到本地数据库,这样就不必依赖于始终可用的资源。 调用本地数据库可以更快,不会用完用户的数据计划,即使设备处于脱机状态也可以使用。 另一方面,您应该计划一种不时刷新数据的方法,例如保留时间和日期戳,并在数据变旧时进行刷新。
- 保存活动的当前状态,以避免再次打开应用程序时不必重新计算。 由活动加载的数据或任何长时间运行的操作的结果应在引发onSaveInstanceState事件时保存,并在引发onRestoreInstanceState事件时恢复。由于状态是使用可序列化的Bundle对象保存的,因此是管理状态的最简单方法将具有一个可序列化的状态对象,其中包含恢复活动所需的所有信息,因此仅需要保存此对象。 用户在View控件中输入的信息已由Android SDK自动保存,无需保持状态。 请记住,当用户离开您的应用程序或旋转屏幕时,活动状态可能会丢失,不仅是在用户导航到另一个活动时。
- 确保您的布局尽可能简单,没有不必要的布局元素。 当视图层次结构太深时,UI引擎将无法遍历所有视图并计算所有元素的位置。 例如,如果您创建一个自定义控件并将其包含在另一个布局元素中,则它可以添加一个额外的视图,该视图对于显示UI而言不是必需的,并且会稍微降低贴图的速度。 您可以分析视图层次结构,以查看可以使用“层次结构查看器”工具将布局展平的位置。 可以使用DDMS透视图中的UI自动器转储视图层次结构图标从Eclipse中打开该工具,或者在<sdk> \ tools \目录中启动独立工具层次结构查看器。
如果您的应用程序中还有其他无法解释的速度下降,则应对其进行概要分析,以帮助确定瓶颈。 在这种情况下,您应该看一下我有关分析Android应用程序的文章。
翻译自: https://www.javacodegeeks.com/2014/06/5-tips-to-improve-performance-in-android-applications.html
android