Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别Android操作系统导致的应用程序缓慢_Android_Performance_Android Fragments_Android Lifecycle - Fatal编程技术网

识别Android操作系统导致的应用程序缓慢

识别Android操作系统导致的应用程序缓慢,android,performance,android-fragments,android-lifecycle,Android,Performance,Android Fragments,Android Lifecycle,如何检查应用程序运行缓慢的原因?更准确地说,哪种生命周期方法在Android中执行需要更多的时间 我已经尝试记录每个活动和片段的生命周期方法,但我无法找出延迟的原因。 调用了onCreate,但是在调用onResume之前有相当长的延迟(大约1s) 由于上述延迟,用户感觉应用程序响应性不强 对于高端手机,延迟时间减少到100毫秒左右。但是,2012-2011年的老款车型却出现了如此巨大的延迟 关于如何进一步调查以确定延迟的根本原因,以及如何优化应用程序以更快地浏览屏幕的一些想法 提前感谢。如果您

如何检查应用程序运行缓慢的原因?更准确地说,哪种生命周期方法在Android中执行需要更多的时间

我已经尝试记录每个活动和片段的生命周期方法,但我无法找出延迟的原因。 调用了
onCreate
,但是在调用
onResume
之前有相当长的延迟(大约1s)

由于上述延迟,用户感觉应用程序响应性不强

对于高端手机,延迟时间减少到100毫秒左右。但是,2012-2011年的老款车型却出现了如此巨大的延迟

关于如何进一步调查以确定延迟的根本原因,以及如何优化应用程序以更快地浏览屏幕的一些想法


提前感谢。

如果您在主线程中处理大量数据(包括复杂的UI呈现),那么您可以在logcat中找到此类消息:

W/Trace(1274): Unexpected value from nativeGetEnabledTags: 0
 I/Choreographer(1274): Skipped 55 frames!  The application may be doing too much work on its main thread. 
这可能会导致应用程序在渲染方面速度减慢 用户界面

可建议的修复方法

解决这一问题需要识别存在或可能发生长时间处理的节点。最好的方法是在与主UI线程分离的线程中执行所有处理,不管它有多小或多大。因此,无论是访问数据表单
SQLite数据库
,还是做一些核心数学运算,或者只是对数组排序,都可以在不同的线程中进行

现在这里有一个陷阱,您将创建一个新线程来执行这些操作,当您运行应用程序时,它将崩溃,并说“只有创建视图层次结构的原始线程才能接触其视图“。您需要知道,android中的UI只能由主线程或UI线程更改。任何其他尝试更改的线程都会失败并因此错误而崩溃。您需要做的是在
rununuithread
内创建一个新的
Runnable
,在该Runnable内,您应该执行与UI.找到一个

因此,我们有
Thread
Runnable
来处理主线程之外的数据,还有什么呢?android中有
AsyncTask
,它可以在UI线程上执行长时间的处理。当应用程序是数据驱动的或web api驱动的,或者使用复杂的UI时,这是最有用的,就像那些使用画布构建的应用程序一样
AsyncTask
的强大之处在于它允许在后台做事情,一旦你完成了处理,你就可以在UI上简单地执行所需的操作,而不会造成任何滞后效果。这是可能的,因为
AsyncTask
源于
活动的UI线程–你在UI上通过
AsyncTask
是一个与主UI线程不同的线程,不妨碍用户交互


这就是制作流畅的android应用程序所需要知道的,据我所知,每个初学者都会在控制台上看到这条信息。

onCreateView()、onActivityCreated()和onStart()也在这些生命周期方法之间调用。您是否也尝试过对这些方法进行计时?您是否尝试过使用调试器并单步执行以查看是否存在需要较长时间的特定方法调用?
onCreate
onResume
是否执行了大量可以异步完成的代码?布局是否需要膨胀极度嵌套和复杂?您是否发现内存图中有任何无法(或无法)解释的爆炸性增长?您的片段是否在膨胀的同时执行大量任务?您是否连接到数据库(在线、SQLite、Realm或类似数据库)是吗?是的,我使用baseActivity和baseFragment完成了所有生命周期方法。在大多数情况下,onViewCreated是最慢的。我已经尝试过通过避免嵌套布局来降低布局的复杂性。没有数据库连接,只是布局膨胀和动画。每分钟查看内存图将是一个好主意。让我来看看eckUsing Asynctask确实有帮助,但对我的问题没有帮助。它可能纯粹与UI和操作系统有关。