1

アプリケーションが遅い理由を確認するにはどうすればよいですか?より正確には、どのライフサイクルメソッドがAndroidで実行するのに時間がかかりますか。Android OSによるアプリケーションの低速性の特定

私はすでに各アクティビティとフラグメントのライフサイクルメソッドのロギングを試みましたが、遅延の理由を特定できませんでした。 onCreateが呼び出されますが、onResumeが呼び出されるまでにかなりの遅延(約1秒)があります。

上記の遅延のため、ユーザーはアプリケーションがあまり反応しないように感じます。

ハイエンド携帯電話の場合、遅延は約100msに短縮されます。しかし、それはこの巨大な遅延を持つ古い2012年から2011年のモデルです。

遅延の根本原因を特定する方法をさらに詳しく調べる方法や、アプリを最適化して画面をすばやくナビゲートする方法について説明します。

ありがとうございます。

+0

onCreateView()、onActivityCreated()、およびonStart()は、ライフサイクルメソッド間でも呼び出されます。タイミングを合わせてみましたか?また、デバッガを使用して試してみて、長い時間がかかる特定のメソッド呼び出しがあるかどうか確認してください。 – arjabbar

+0

'onCreate'と' onResume'は非同期で実行できるコードをたくさんしていますか?非常にネストされ複雑なレイアウトになっていますか?説明できない、または説明できないメモリグラフが爆発的に増加していますか?あなたの断片は、彼らが膨張されると同時に多くの仕事をしていますか?あなたはデータベース(オンライン、SQLite、Realmなど)に接続していますか? – Korcholis

+0

うん、私はすべてのライフサイクルメソッドをbaseActivityとbaseFragmentを使って行った。ほとんどの場合、onViewCreatedが最も遅いです。私はすでにネストされたレイアウトを避けることによって、レイアウトの複雑さを減らそうとしました。データベース接続なし、アニメーションによるレイアウトの膨張のみ。 –

答えて

1

あなたがメインスレッドで(複雑な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のレンダリングに関して

Suggestableは修正

これを修正するには、長い処理時間が発生する可能性のあるノードを特定する必要があります。最善の方法は、メインのUIスレッドとは別のスレッドでどれくらい小さくても大きくても、すべての処理を行うことです。したがって、データ形式SQLite Databaseにアクセスするか、いくつかのハードコア数学を実行するか、単純に配列をソートする - 別のスレッドでそれを実行する

ここでキャッチがあります。これらの操作を実行するための新しいスレッドを作成し、 "ビュー階層を作成した元のスレッドのみがそのビューに触れることができる"というクラッシュが発生します。あなたは、アンドロイドのUIをメインスレッドまたはUIスレッドだけで変更できるというこの事実を知る必要があります。そうしようとする他のスレッドは、このエラーで失敗し、クラッシュします。あなたがする必要があるのは、RunnablerunOnUiThreadの中に新しく作成し、この実行可能ファイル内にUIを含むすべての操作を行う必要があります。 example hereを見つけます。

メインスレッドからデータを処理するためにThreadRunnableがあります。アンドロイドにはAsyncTaskがあり、UIスレッドで長時間の処理が可能です。これは、アプリケーションがデータ駆動型またはWeb API駆動型である場合、またはCanvasを使用したビルドのような複雑なUIを使用する場合に最も便利です。 AsyncTaskのパワーは、バックグラウンドでの処理を可能にし、処理が完了したら、ラグ効果を引き起こすことなくUIで必要なアクションを実行するだけです。これは、AsyncTaskActivityのUIスレッドから派生しているためです。AsyncTaskによってUI上で行うすべての操作は、メインUIスレッドとは異なるスレッドで行われます。ユーザーの操作に支障はありません。

これはスムーズなアンドロイドアプリケーションを作成するために知っておくべきことであり、すべての初心者がこのメッセージをコンソールで受け取ることを知っています。

+0

をチェックさせてください。私の問題ではなく、Asynctaskを使用するとヘルプができます。これは純粋にUIとOSにおそらく関連しています。 –

関連する問題