0

私はメインクラスを持っています

public class MainActivity extends Activity {
    downloadTask downloadTask;
    ....
    void updateProgress(int... progress) {

    }
}

および AsyncTask

public class downloadTask extends AsyncTask<Void, double[], Void> {
    ....
    protected void onProgressUpdate(int... progress) {
    }    
}

代わりに使用するように設定してonProgressUpdateオーバーライドする方法はありますか?updateProgressMainActivity

downloadTaskそこで拡張して使用する新しいクラスを作成できることは承知してい@Overrideます。何か別の方法はないかと考えているだけです。たとえば、JavaScriptでは次のようなことができます

downloadTask.onProgressUpdate = updateProgress

Javaでこのようなことは可能ですか?

4

1 に答える 1

0

次のようなことができます。

AsyncTask<Void, double[], Void> task = new AsyncTask<Void, double[], Void>(activity);
{
     private WeakReference<Activity> activityReference;

     public AsyncTask(Activity activity)
     {
          this.activityReference = new WeakReference<Activity>(activity);
     }

     protected void onProgressUpdate(int... progress) 
     {
         Activity activity = activityReference.get();
         if(activity != null)
         {
             activity.updateProgres(...);
         }
     }    
}

AsyncTask 内で WeakReference を使用していることに注意してください。これは、メモリ リークを防ぐために非常に重要です。

于 2013-08-09T16:45:13.637 に答える