我有一个主要课程
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中可能吗?
答案 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,这对于防止内存泄漏非常重要。