0

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

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

PS:加载器附加到一个fragment并且fragment RetainInstance设置为true。

提前致谢。

4

1 回答 1

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 问题

于 2013-09-12T00:11:14.317 回答