4

Android データベースから大量のデータをロードして画面に表示する必要がある Android アプリケーションを開発していました。

開発の初期段階では、OnCreate() メソッドで DB からデータを取得していましたが、データが巨大になるとアクティビティの開始が非常に遅くなりました。そのため、OnResume() メソッドでデータの取得と画面表示を呼び出して、読み込みに時間がかかりすぎてもアプリがクラッシュしないようにしました。OnResume が完了するまでアクティビティが表示されないことはわかっています。

OnCreate() メソッドですべての初期化を行うのではなく、OnResume で時間のかかる操作を呼び出すのは良い方法ですか?

4

2 に答える 2

3

OnCreate() メソッドですべての初期化を行うのではなく、OnResume で時間のかかる操作を呼び出すのは良い方法ですか?

いいえ - OnCreate または OnResume 内で実行しないでください。AsyncTask のように、常に作業スレッド内で実行する必要があります。

UI スレッドで実行された場合、完了までに時間がかかる操作はメッセージ キューをブロックします。これは、UI ウィジェットの再描画がないことを意味し、ユーザーはアプリをタップして何もできません。操作が完了するまで、すべてがブロックされます。~5 秒後、Android は ANR を生成し (アプリケーションが応答しない)、アプリを強制終了します。

于 2015-12-26T09:53:10.160 に答える
1

メインスレッドで IO 操作を行うべきではありません。これには、常にメイン スレッドで呼び出されるメソッドが含まれonCreateますonResume

データを正しくロードするには、AsyncTaskまたはContentLoaderとそのコールバックを使用する必要があります。

一般的に言えば、アプリケーションでデータベースを使用するには、aContentProviderCursorLoaders を使用する必要があります。これらの使用方法に関するチュートリアルがたくさんあり、コードの管理が容易になります。

于 2015-12-26T09:57:01.787 に答える