2011-07-29 29 views
0

私はAsyncタスクを含むサービスクラスを持っています。 doInBackgroundとonPostExecuteでは、サービスクラスにあるが非同期タスクの外にあるいくつかのメソッドを呼び出します。これらのメソッドが呼び出されると、Asyncタスクによって作成されたスレッドには依然として存在するため、メインUIに干渉しません。非同期タスク - 明確ではないメソッドを呼び出す

私の理解が不足していることを説明するために、サービスクラスが非同期タスクに行うほとんどすべてを取得する必要があります。たとえば、アラームの結果としてサービスが開始され、onStartCommandで繰り返しアラームが設定され(Reto Meireの地震の例)、データベースが作成されます。これら2つの操作のコードを非同期タスクのonPreExecute部分に移動するのは意味がありますか?

答えて

0

バックグラウンドで実行したいメソッドがdoInBavkground()から呼び出されていることを確認してください。postExecuteに置くことができます。バックグラウンドタスクの後に実行したいスニペットPostExecute()にあるはずです。あなたがdoInBackground()からメソッドを呼び出すと、彼らはまだバックグラウンドスレッドで実行されます..どこにいても問題ありません。そして、onPostExecute()から呼び出すと、あなたのディスプレイに変更を加えることができる他のスレッドで実行されます。ダイアログなど...

+0

onPostExecute *はUIスレッドで実行されます –

0

できるだけ多くの作業をバックグラウンドスレッド/タスクにオフロードする必要があります。データベース作成のようなものはdoInBackgroundメソッドで行う必要があります。 onPreExecuteおよびonPostExecuteメソッドは、UIスレッド上で実行され、一般的に、背景アクティビティをユーザに通知するために使用されます(たとえば、ProgressDialogを使用)。

経験から、ではなく、とお勧めします。あなたが1つを使用する場合、あなたは一般的にバックグラウンドで実行されているアプリケーションで迷惑になるので、それを適切にクリーンアップする方法を知っている必要があります。

+0

おそらくあなたはUIスレッドで動作します。 – ngesh

+0

@Cheサービスは非同期でブロックされないと効果的ですか?私はこのモデルをReto MeirのEarthquakeサンプルに基づいていました。サービスを実行してもAsyncを使用する必要性は減りませんでした。私は混乱しており、これに関するガイダンスは感謝しています。 – ron

+0

サービスはメインスレッド上で実行されます - あなたはAsyncTaskをまだ生成する必要があります。混乱を避けるために前のコメントを削除しました。まだ*サービスを避けることをお勧めします。 –

関連する問題