所以我在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));
答案 0 :(得分:1)
所以,当我开始使用
时sendStickyBroadcast(new Intent(Helper.UpdateCounts)
.putExtra(Helper.PARAM_LIST_COUNTS, counts));
而不是
sendBroadcast(new Intent(Helper.UpdateCounts)
.putExtra(Helper.PARAM_LIST_COUNTS, counts));
它有效。