Waypoint
Waypoint

Reputation: 17763

Android async task - which activity evoked it?

I am facing problem of having one async task, but I need it use twice, because each time I change different part of GUI (updating progress bar).

Is there any way how to determine in if - else clause, which activity does it call and then make appropriate function for each of both of them?

Edit: huh, answer was here and now there isn't...

Thanks

Upvotes: 0

Views: 489

Answers (2)

WarrenFaith
WarrenFaith

Reputation: 57682

You can hold a member variable which contains the activity/context it is started from.

//pseudocode
AsyncTask task = new AsyncTask();
task.mActivity = this;
task.execute();

Inside doInBackground just check the activity:

//pseudocode
if (mActivity instanceof MyActivity) {
    // ....
} else {
    // ....
}

Upvotes: 2

aromero
aromero

Reputation: 25761

Extract the code from the AsyncTask implementation and delegate that to the Activity. Example:

public interface MyDelegate {
    public void updateProgress(....)
}

Your AsyncTask takes a delegate and calls it when appropiate:

public class MyAsyncTask .... {
    public MyAsyncTask(MyDelegate myDelegate) { ... }

    // somewhere in your code (probably onProgressUpdate)
    myDelegate.updateProgress(...)
}

Your Activity/ies implement/s the delegate:

public class MyActivity extends Activity implements MyDelegate {
   public void updateProgress(...) {
       // update ui
   }

   // somewhere in your code:
   new MyAsyncTask(this).execute(...);
}

Upvotes: 0

Related Questions