1

AsyncTask クラスを使用して Android アプリで非同期サービス呼び出しを作成しようとしていますが、アクティビティのすべてのサービス呼び出しに対して、AsyncTask を拡張するアプリケーションにサブクラスが必要です。誰でもこれを行うためのより良い方法を提案できますか???

私のシナリオでは、サービス呼び出しには異なる戻り値の型があります。次に、すべてのサービス呼び出しに対してオブジェクトを返し、それに応じて型キャストする必要があります。これを行うより良い方法はありますか???

4

3 に答える 3

1

あなたが書いたサービスですか?その場合、サービス自体を非同期にして、即座に返され、後でコールバックを介して通知を受ける呼び出しを行うことができます。これにより、Activity で AsyncTasks を使用する必要がなくなります。

Service を変更できない場合、できることの 1 つは、Service との対話を担当するバックグラウンド ワーカー スレッドを用意し、Handler を使用してメイン スレッドからそれにメッセージを投稿することです。各作業項目が完了すると、ワーカー スレッドは別の Handler を使用して結果を UI スレッドに返します。

参照: http://developer.android.com/reference/android/os/Handler.html

于 2012-11-19T20:38:46.787 に答える
0

AsyncTask をアクティビティの内部クラスとして宣言しないでください。このクラスを独自のスコープで一度宣言すると、どこからでも使用できます。送受信するデータに関しては、最初のパラメーターを String または Uri にして要求データを渡すことができ、アクティビティによって設定できる AsyncTask の内部リスナー オブジェクトを使用して呼び出しを受け取ることができます。 onPostExecute が起動したときに戻ります。

編集

これの最も単純なバージョンを示すために要点を作成しました。サンプルの AsyncTask 派生クラスを使用すると、アプリ全体でこの 1 つのクラスを再利用し、すべてのエンドポイントを渡して、アクティビティ内 (またはサービス呼び出しを行う必要がある他の場所) で結果を受け取ることができます。これをさらに拡張する必要がある場合は、入力オブジェクトを文字列から、サービス呼び出しに渡す必要があるもの (post パラメーター、http メソッドなど) を含むより複雑なデータ構造に変更するだけで、署名を変更できます。生の結果だけでなく、構造化されたデータを返したい場合は、OnPostExecuteListener インターフェイスの

https://gist.github.com/80c59fb70e195ca142bb

于 2012-11-19T20:54:47.867 に答える
0

「AsyncTask を使用するには、サブクラス化する必要があります。」ドロイドをつかまえます。

于 2012-11-19T20:37:53.080 に答える