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& 覆盖它,以便它updateProgress使用MainActivity

我知道我可以创建一个在那里扩展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 回答