AsyncTask クラスを使用して Android アプリで非同期サービス呼び出しを作成しようとしていますが、アクティビティのすべてのサービス呼び出しに対して、AsyncTask を拡張するアプリケーションにサブクラスが必要です。誰でもこれを行うためのより良い方法を提案できますか???
私のシナリオでは、サービス呼び出しには異なる戻り値の型があります。次に、すべてのサービス呼び出しに対してオブジェクトを返し、それに応じて型キャストする必要があります。これを行うより良い方法はありますか???
AsyncTask クラスを使用して Android アプリで非同期サービス呼び出しを作成しようとしていますが、アクティビティのすべてのサービス呼び出しに対して、AsyncTask を拡張するアプリケーションにサブクラスが必要です。誰でもこれを行うためのより良い方法を提案できますか???
私のシナリオでは、サービス呼び出しには異なる戻り値の型があります。次に、すべてのサービス呼び出しに対してオブジェクトを返し、それに応じて型キャストする必要があります。これを行うより良い方法はありますか???
あなたが書いたサービスですか?その場合、サービス自体を非同期にして、即座に返され、後でコールバックを介して通知を受ける呼び出しを行うことができます。これにより、Activity で AsyncTasks を使用する必要がなくなります。
Service を変更できない場合、できることの 1 つは、Service との対話を担当するバックグラウンド ワーカー スレッドを用意し、Handler を使用してメイン スレッドからそれにメッセージを投稿することです。各作業項目が完了すると、ワーカー スレッドは別の Handler を使用して結果を UI スレッドに返します。
参照: http://developer.android.com/reference/android/os/Handler.html
AsyncTask をアクティビティの内部クラスとして宣言しないでください。このクラスを独自のスコープで一度宣言すると、どこからでも使用できます。送受信するデータに関しては、最初のパラメーターを String または Uri にして要求データを渡すことができ、アクティビティによって設定できる AsyncTask の内部リスナー オブジェクトを使用して呼び出しを受け取ることができます。 onPostExecute が起動したときに戻ります。
編集
これの最も単純なバージョンを示すために要点を作成しました。サンプルの AsyncTask 派生クラスを使用すると、アプリ全体でこの 1 つのクラスを再利用し、すべてのエンドポイントを渡して、アクティビティ内 (またはサービス呼び出しを行う必要がある他の場所) で結果を受け取ることができます。これをさらに拡張する必要がある場合は、入力オブジェクトを文字列から、サービス呼び出しに渡す必要があるもの (post パラメーター、http メソッドなど) を含むより複雑なデータ構造に変更するだけで、署名を変更できます。生の結果だけでなく、構造化されたデータを返したい場合は、OnPostExecuteListener インターフェイスの
「AsyncTask を使用するには、サブクラス化する必要があります。」ドロイドをつかまえます。