重新创建活动时,AsyncTaskLoader将重新启动

时间:2013-09-11 23:27:22

标签: android android-fragments asynctaskloader

您好我正在实现自定义asynctaskloader以在后台加载数据,即使用户导航出应用程序,我也需要加载进程才能运行。问题是,一旦用户按下菜单按钮,例如调用了加载器onStopLoading(),然后调用loadInbackgroud()来重新启动加载过程。

任何想法如何在每次导航出程序或转动屏幕时阻止加载程序重新启动加载过程,因为在加载过程中我获得了部分唤醒锁定。

P.S:加载器附加到片段,片段RetainInstance设置为true。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您是否考虑使用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 question