Mám hlavnú triedu
public class MainActivity extends Activity {
downloadTask downloadTask;
....
void updateProgress(int... progress) {
}
}
a AsyncTask
public class downloadTask extends AsyncTask<Void, double[], Void> {
....
protected void onProgressUpdate(int... progress) {
}
}
Existuje spôsob, akým môžem nastaviť onProgressUpdate
& override to tak, že používa updateProgress
namiesto toho z MainActivity
?
Som si vedomý, že môžem vytvoriť novú triedu, ktorá sa rozširuje downloadTask
a používať @Override
tam. Len sa zaujímam, či je iná cesta. Napríklad v javascripte by som mohol niečo urobiť
downloadTask.onProgressUpdate = updateProgress
Je niečo také možné v jave?
odpovede:
0 pre odpoveď č. 1Môžete urobiť niečo takéto:
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(...);
}
}
}
Všimnite si, že používam WeakReference vo vnútri AsyncTasku, je to veľmi dôležité, aby sa zabránilo úniku pamäte.