0

Runnable から AsyncTask を実行することは可能ですか? 私の経験では、それは可能ですが、安全ではありません。私のアプリが最初に実行されると、Runnable から AsyncTask が正常に実行されます。しかし、アプリがバックグラウンドに移動されてから前に戻されると、「Looper.prepare() を呼び出していないスレッド内でハンドラーを作成できません」というメッセージが表示されます。

これが私がやろうとしていることです: 私は MapView を使用し、onCreate 内で runOnFirstFix(Runnable) を呼び出しています。私の Runnable は AsyncTask を呼び出して、場所に基づいてデータを返す Web サービス呼び出しを実行します。アプリをバックグラウンドに移動し (ホーム ボタンをタップして)、しばらくしてからアプリを再び前に出し、AsyncTask で execute() を呼び出している時点で例外を受け取ります。

まず、runOnFirstFix が再度実行されるのはなぜですか。第二に、なぜ2回目に例外が発生するのですか? 私が理解していないライフサイクルの一部があると思います。

ありがとう。

4

1 に答える 1

0

AsyncTask を UI スレッドから呼び出す必要があることは、最初はわかりませんでした。そのため、runOnFirstFix が 2 回目に実行されたときは、UI スレッド上にない Runnable からのものでした。問題を解決するために、AsynchTask を実行するために、最初の内部に別の Runnable を簡単に作成しました。

私の runOnFirstFix が 2 回呼び出されたように見える理由は、単純にその新しいインスタンスを作成していたためです。

于 2011-05-19T17:53:47.547 に答える