广播接收器在某些情况下不工作

时间:2015-05-06 10:21:27

标签: android broadcastreceiver

所以我在Fragment.class中有这个接收器

private BroadcastReceiver receiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(WeekplanHepler.ACTION_SERVICE_BINDED) && getUpdateService() != null) {
            getCounts();
        }

        if (intent.getAction().equals(Helper.UpdateCounts)) {
            HashMap<String, Integer> counts = (HashMap<String, Integer>) intent.getSerializableExtra(Helper.PARAM_LIST_COUNTS);
            // Updating counts
        }
    }
};

使用此代码注册/取消注册此接收器:

@Override
public void onStart() {
    super.onStart();
    getCounts(true);
    getActivity().registerReceiver(receiver, getIntentFilter());
}

@Override
public void onStop() {
    super.onStop();
    getActivity().unregisterReceiver(receiver);
}

getCounts()是UpdateService中的RetrofitRequest,这里是getUpdateService()

因此,当改装请求完成后,它会通过Intent返回计数,然后,如您所见,我会更新它们。但是,如果我去下一个Activity然后返回,请求将正常工作,它将发送意图,但接收器不会得到它。我认为这可能是由方法服务首先绑定引起的。所以我有BaseFragment,它为所有需要的片段绑定服务

public abstract class BaseFragment<T> extends CustomListFragment<T> {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getActivity().getApplicationContext().bindService(new Intent(getActivity().getApplicationContext(), 
                WeekplanUpdateService.class), connection, Context.BIND_AUTO_CREATE);
    }
}

当我进入下一个活动时,它的片段将绑定服务,我之前的片段将再次调用请求,并且将有计数。也许接收者对他能获得多少意图有一些限制,但我不这么认为。请帮忙

哦,我忘了提及我是如何发送意图的

sendBroadcast(new Intent(Helper.UpdateCounts).putExtra(Helper.PARAM_LIST_COUNTS, counts));

1 个答案:

答案 0 :(得分:1)

所以,当我开始使用

sendStickyBroadcast(new Intent(Helper.UpdateCounts)
                    .putExtra(Helper.PARAM_LIST_COUNTS, counts));

而不是

sendBroadcast(new Intent(Helper.UpdateCounts)
                    .putExtra(Helper.PARAM_LIST_COUNTS, counts));

它有效。