Использовать интерфейс
Выполните следующие действия:
1) Создать интерфейс
public interface AsyncTaskListener{
public void updateResult(String result);
}
2) Используйте слушателя в AsyncTask
DownloadSongTask extends AsyncTask<String,Integer,String>{
private AsyncTaskListener listener;
public DownloadSongTask(Context context)
{
listener= (AsyncTaskListener)context; // Typecast
}
@Override
public void doInbackGround(String... params)
{
// Download code
int downloadPerc = // calculate that
publish(downloadPerc);
}
@Override
public void onPostExecute(String result)
{
listener.updateResult(String result); // Use it
}
}
3) Реализуйте интерфейс в своей деятельности и переопределите метод интерфейса
public class YourActivity extends AppcompatActivity implements AsyncTaskListener{
// Activity code //
new DownloadSongTask(this).execute("Paradise.mp3"); // this is how you start Task
public void yourMethod(String arg)
{
// Your method related Stuff
}
@Override
public void updateResult(String result){
yourMethod(result);
}
}
Преимущество использования интерфейса?
Поначалу этот подход кажется длительным, но если вы используете этот подход
Вы можете сделать слабо связанную AsyncTask. Это означает, что вы можете использовать тот же AsyncTask с любой деятельностью в будущем, даже не меняя код в AsyncTask.
Соответствующие ссылки:
Для лучшего понимания вы можете прочитать это ОТВЕТ