1

次の動作を実現したいのですが、方法がわかりません。

   1. User start an activity
   2. Activity starts an AsyncTask
   3. After initiating the AsyncTask,the control is transferred to another activity.
   4. Now,when the AsynTask finishes its work,the 2nd activity should get to know that        AsyncTask has completed its working in the previous activity.

その機能を実現する方法がわかりません。I know how to use AsyncTaskでも、親の活動以外の活動で、仕事の終わりを知らせる方法がわかりません。助けてください。よろしくお願いします。

最初のアクティビティでAsyncTaskで作業を開始したいので、コントロールは2番目のアクティビティに移されますが、AsyncTaskはまだ実行されています。AsyncTaskがその機能を完了すると、2番目のアクティビティに通知したいと思います。次に、2番目のアクティビティで何らかの機能を実行したいとします。

4

2 に答える 2

2

を作成interfaceしてAsyncTask(コンストラクターで) に渡し、.. でインターフェイス メソッドをonPostExecute呼び出して、2 番目のアクティビティにこのインターフェイスを実装させることができます。

例えば:

あなたのインターフェース:

public interface OnTaskCompleted {
    void onTaskCompleted();
}

2 番目のアクティビティ:

public MyActivity implements OnTaskCompleted {
    //your Activity
}

そしてあなたの AsyncTask:

public YourTask extends AsyncTask<Object,Object,Object> { //change Object to required type
    private OnTaskCompleted listener;

    public YourTask(OnTaskCompleted listener) {
        this.listener=listener;
    }

    //required methods

    protected void onPostExecute(Object o) {
        //your stuff
        listener.onTaskCompleted();
    }
}
于 2012-12-05T08:05:04.260 に答える
1
  • 2 番目のアクティビティで BroadcastReceiver を作成し、registerReceiver() メソッドを使用して登録します。
  • 最初のアクティビティの AsyncTask onPostExecute() メソッド内の sendBroadcast()。

    public class SecondActivity extends Activity {
        private BroadcastReceiver myBroadcastReceiver =
            new BroadcastReceiver() {
                @Override
                public void onReceive(...) {
                    ...
                }
           });
    
        ...
    
        public void onResume() {
            super.onResume();
            IntentFilter filter = new IntentFilter();  
                        filter.addAction("com.example.asynctaskcompleted");  
                        filter.addCategory("android.intent.category.DEFAULT");
            registerReceiver(myBroadcastReceiver, filter);
        }
    
        public void onPause() {
            super.onPause();
            ...
            unregisterReceiver(myBroadcastReceiver);
        }
        ...
    }
    
    
    public class FirstActivity extends Activity {
        private class MyTask extends AsyncTask<Void, Void, Void> {
            protected Void doInBackground(Void... args) {
            ...
        }    
    
        protected void onPostExecute(Void result) {
            Intent intent = new Intent ("com.example.asynctaskcompleted");            
    
            FirstActivity.this.sendBroadcast(intent);
     }
    

    }

于 2012-12-05T08:12:58.713 に答える