私はアンドロイドにアプリケーションを持っています。ここでは、いくつかのREST Webサービスにアクセスしています。私はこれらにアクセスするためにAsyncTasksを使用しており、あといくつかUIの変更を行います。私は、これらの呼び出しのいくつかをさまざまなアクティビティで使用したいと考えています。しかし、私が読んだすべてのチュートリアルによれば、AsyncTasksはアクティビティの内部クラスとして使用されます(これらのアクティビティのビューを変更しているので意味があります)。しかし、どのようにしてAsyncTasksの再利用性を解決できますか?さらに、場所の変更時にAsyncTasks呼び出しをいくつか行いたいとしましょう。私はLocationListener(単一の外部クラス)を持っており、onLocationChange()メソッドの内部でAPI呼び出しを行いたいと思います。しかし私は、私が希望する意見にアクセスすることはできません。なぜなら私はアクティビティクラスにいないからです。誰かがクラスのアーキテクチャーをどうやっていいのか、アイデアがありますか?ありがとうございました。再利用可能なAsyncTasksをアンドロイドで作成するには?
4
A
答えて
4
任意のアクティビティ内で統合するのではなく、別のクラスとして非同期タスクを作成できます。
サンプルコードは:::以下
public class KeyTask extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
Log.i("onPreExecute", ".onPreExecute() — start");
}
@Override
protected String doInBackground(Void ... params) {
Log.i("TransmissionKeyTask", ".doInBackground() — start");
}
@Override
protected void onPostExecute(String result) {
Log.i("onPostExecute", ".onPostExecute() — start");
}
}
であるとも、あなたが以下のようにそれにコンストラクタを追加します::
public KeyTask(Context context) {
// TODO Auto-generated constructor stub
}
+1
はい、できますが、一部のコンポーネントを変更する必要がある場合は、onPostExecuteメソッドで行う必要があります。タスクがより多様なアクティビティで使用されている場合は、問題になる可能性があります。私はそれがコンテキストのインスタンスをチェックすることによって行うことができると思います(そうですか?)その場合、ユーザーが別のアクティビティにナビゲートしていないかどうかを確認するにはどうすればいいですか? –
+1
enumarationまたはswitch caseのいずれかを使用して、これらのタスクを呼び出す際にコンストラクタを持ち、特定の値を使用して呼び出して区別することができます –
関連する問題
- 1. クリアボタンで再利用可能なEditTextを作成するには?
- 2. jQueryで再利用可能なコードを作成するには?
- 3. Google AdWordsで再利用可能な機能を作成する
- 4. 再利用可能なコードを作成するには?
- 5. リストビュー再利用可能なコンポーネント - アーキテクチャ - アンドロイド
- 6. React.jsで再利用可能なヘルパー関数を作成する
- 7. 再利用可能なコントローラーコンポーネントをリチウムで作成する
- 8. KnockoutJSで再利用可能なコンポーネントを作成する
- 9. Vue.jsで再利用可能なコンポーネントを作成する方法
- 10. Jqueryで再利用可能な関数を作成する
- 11. VS2008で再利用可能なUserControlアセンブリを作成する
- 12. simpleSchemaで再利用可能なコンポーネントを作成する方法
- 13. 反応するjsで再利用可能なタイマーを作成
- 14. 再利用可能なLinqをストアドプロシージャのSQLに作成する
- 15. 再利用可能なコードを作る
- 16. 再利用可能なmatAutocompleteディレクティブを作成する
- 17. Vue.js再利用可能な関数を作成する
- 18. 再利用可能なコンポーネントを作成するreactys
- 19. 再利用可能なig-gridを作成する方法
- 20. 再利用可能なコンコースパイプラインを作成する
- 21. 再利用可能なメソッドを作成する際の問題
- 22. Cycle.js再利用可能なモジュールを作成する
- 23. 再利用不可能なセルを作成するUICollectionView
- 24. 再利用可能なウィジェットを作成する
- 25. LINQ to SQLの再利用可能なチャンクを作成する
- 26. Vue2で再利用可能な「CheckAll」チェックボックスソリューションを作成するには
- 27. Zend Frameworkで再利用可能なモジュールを作成するには?
- 28. GWTで再利用可能なウィジェットとオブジェクトを作成するには?
- 29. visioで再利用可能なUML要素を作成するには?
- 30. swaggerで再利用可能な配列定義を作成
OOの観点から、あなたは再利用可能ではない、再利用可能なビジネス・コンポーネントを作成する必要がありますAsyncTask。詳細については、私の答え[ここ](http://stackoverflow.com/questions/8295003/best-way-to-manage-the-progressdialog-from-asynctask/8317071#8317071)を参照してください。 – yorkw
しかし、あなたが必要なのは、異なるアクティビティでonPostExecute()メソッドを別々に実装する必要があるときに、多くのコードを繰り返すように思えます。 –
IMO AsyncTaskを分離するほうがはるかに優れています。コーディングの複雑さ(コンテキストの参照の受け渡し)を追加するのではなく、実際の利益(再利用可能性、テスト容易性)を得ることができません。 OOの観点からのコードリファクタリングについて言えば、純粋なコードレベルから内部クラス(AsyncTask、BaseAdapterなど)を取り除くのではなく、問題抽象化レベルから多くを考えてください。コードをシンプルにしたい場合は、AsyncTaskコードを維持するsuper Activityの使用を検討してください。AsyncTaskを別のクラスとして作成するよりも優れています。 – yorkw