Android更改其他类的事件定义

时间:2013-08-09 16:38:51

标签: java android android-asynctask

我有一个主要课程

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&amp;覆盖它,以便它使用updateProgress来代替MainActivity

我知道我可以创建一个扩展downloadTask并在那里使用@Override的新类。我只是想知道是否还有另一种方式。例如在javascript中我可以做类似

的事情
downloadTask.onProgressUpdate = updateProgress

这样的东西在java中可能吗?

1 个答案:

答案 0 :(得分: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,这对于防止内存泄漏非常重要。