您是否考虑过使用IntentService而不是 AsyncTask?
IntentService 是一个在后台运行的组件,不受活动生命周期的约束,因此在片段/活动暂停/重启/销毁时不会受到影响。您仍然可以使用ResultReceiver将进度/结果/失败发布到活动或基于片段的侦听器。
一个非常基本的代码示例:
public class MyService extends IntentService
{
public MyService()
{
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent)
{
// Perform your loading here ...
publishOutcome("Success");
}
private void publishOutcome(String outcome)
{
Bundle outcomeData = new Bundle();
outcomeData.putString(OUTCOME, outcome);
receiver.send(MY_OUTCOME, outcomeData );
}
}
有关 AsyncTask 与 IntentService 的更详细讨论,请查看此StackOverflow 问题。