0

我知道已经有很多关于这个主题的问题,但我没有找到任何与我的问题完全匹配的问题。

情景

Button我的其中有一个Fragment,单击时会启动一个IntentService并显示一个ProgressBar. IntentService进行网络调用,通常需要 5-10 秒,然后是sendBroadcast(). 我删除了实现已注册和未注册的ProgressBarinonReceive()方法FragmentBroadcastReceiveronResume()onPause()

问题

假设用户按下ButtonIntentService启动。在IntentService发送广播之前,用户会做一些事情,比如打开设置屏幕。现在我的片段在onStop(). 如果IntentService现在发送广播,我Fragment会错过它,当用户返回时,他会收到一个永无止境的问候ProgressBar

我无法将注册/取消注册移动到onStart()/ onStop(),因为打开设置屏幕调用onStop()并且仍然会错过广播。

这给我留下了onCreate()/ onDestroy()。但是文件说不能保证onDestroy()可以调用。所以我对我应该在哪里进行注册/注销感到有点迷茫。

有什么建议么?

4

2 回答 2

1

如果您可以在IntenService运行时留下片段,我建议您在SharedPreferences. 将变量放在trueIntentService 启动时并将其更改为false完成时(就在您的sendBroadcast.

在您的片段中,您可以检查每次onResume再次注册广播,然后检查SharedPreferences变量的值(以防止由于多线程导致在获取正确值时出现问题)。

希望能帮助到你

于 2014-05-23T06:06:34.617 回答
1

正如您在问题中所说,您在 Fragment 中注册和注销接收者。

还有一个更好的地方。

@Override
    public void onDetach() {
        super.onDetach();

        // unregister here
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        // register here
    }
于 2014-05-23T06:07:43.160 回答