1

非同期操作を実行するたびに多くの繰り返しコードを記述しないようにするために、一般的な AsyncTasks ファクトリを実装したいのですが、問題があります。

したがって、AsyncTasks ファクトリを使用するすべてのアクティビティがサブクラス化する必要がある GlobalActivity でこのファクトリ クラスを定義したいのですが、GlobalActivity から継承されたすべてのアクティブなアクティビティで doInBackground メソッドの結果を使用する必要があります。私の考えは、そのクラスでいくつかのメソッド updateCurrentActivity() を定義することです。これはすべてのサブクラスがオーバーライドし、その doInBackground の結果でいくつかの操作を行う必要があります (表示など)。しかし、この結果をどのように処理するかはわかりません。たとえば、ファクトリの onPostExecute 定義は次のとおりです。

protected void onPostExecute(HashMap<String, Object> result)
    {  
        currentActivityData = result;
                   //How to pass that result to the current Active
                   //activity which is overriding this method?
        updateCurrentActivity();
    }

そのような工場を作ることは共通して良い考えですか?またはnew AsyncTask...、AsyncTask を使用するたびに記述することをお勧めしますか?

4

1 に答える 1

2

AsyncTask を拡張する MyTask クラスを作成し、次のようなタスクを実行するアクティビティからコンストラクターでハンドラーを渡すことができます

final Handler mHandler = new Handler() { 

  public void handleMessage(Message msg) 
  { 
       //get your data here
       int something = msg.arg1; 
  } 
}; 

public void myMethodInsideActivity{
    new MyTask(this, mHandler).execute();
}

このように、タスクの pre、progressUpdate、または post からこれを呼び出します

Message msg = new Message();
msg.arg1 = 1;
actHandler.sendMessage(msg);

このようにして、1 つのタスク クラスと複数のインスタンスのみを持ち、それぞれがハンドラーを介してそのアクティビティに接続されます。

于 2013-03-06T14:29:11.333 に答える