3

Fragmentsをロードする必要があるオンラインサービスを使用するAndroidアプリに取り組んでいます。基本的に、メニューがあり、各ボタンがその下の Fragment を置き換えます。ボタンをクリックすると、フラグメントの置換が開始され、その間にキーボードから別のボタンを押すと、 [アプリケーションが応答していません] ダイアログが表示され、[待機] をクリックすると、フラグメントが正常に読み込まれます。

それが起こらないようにする方法はありますか?Web サービスが原因で、アプリの読み込みに常に数秒かかります。を使用できることをGoogleで読みAsyncTask、メソッドのロードを終了しましたdoOnBackground..それが機能するかどうかはわかりませんが、そこでビューを変更できないため、試すことさえできません元のスレッドのみに関するエラーは、ビューを変更できます。ビューの読み込みを完了するにはサービスが必要なので、AsyncTask でサービスを実行することさえできません。

もうアイデアが尽きた!これを行う方法が必要です。提案に感謝します!

4

3 に答える 3

11

それが起こらないようにする方法はありますか?

はい: メイン アプリケーション スレッドにそれほど時間をかけないでください。可能性のある原因 (ディスク I/O、ネットワーク I/O) を特定するために使用StrictModeし、Traceview を使用して、時間がかかりすぎる可能性のある他の作業を見つけます。

Web サービスが原因で、アプリの読み込みに常に数秒かかります。

これは、バックグラウンド スレッドで実行する必要があります。

AsyncTask を使用して DoOnBackground メソッドの読み込みを終了できることを Google で読みました。元のスレッドのみがビューを変更できるというエラーをスローします

のドキュメントでonPostExecute()説明されているように、メソッドからビューを更新するのはそのためです。AsyncTask

于 2012-11-09T14:51:31.163 に答える
0

メイン スレッドのコンテキストでデータベース操作またはコンテンツ プロバイダー操作を実行しないでください。遅かれ早かれ、アプリケーションの応答なしエラーが発生します。ANR は適切な方法ではありません。

于 2013-11-07T17:38:50.757 に答える
0

AsyncTask の onPostExecute() 関数で UI を変更する必要があります。

于 2012-11-09T14:52:29.383 に答える