/ / Android zmeniť definíciu udalostí z iných tried - java, android, android-asynctask

Android zmena definície udalosti z iných tried - java, android, android-asynctask

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ď č. 1

Môž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.