gpt4 book ai didi

java - 如何注销 fragment 中使用的Receiver?

转载 作者:行者123 更新时间:2023-11-29 09:00:18 25 4
gpt4 key购买 nike

我在我的 FragmentInfo 类中实现了 onReceive 方法,因为当我的代码中的其他地方发送 Intent 时,我需要更新 UI。这个rec​​eiver我是从Fragment注册的,但是是从MainActivity注册的,因为必须从Activity注册。我不知道在哪里放置 unregisterReceiver 调用,所以我的程序崩溃了。我收到错误:

MainActivity 泄露了最初在此处注册的 IntentReceiver FragmentInfo。您是否错过了对 unregisterReceiver() 的调用?

我试图从 MainActivity 的 onPause 方法调用 unregisterReceiver,就像通常那样,但是我无法从 MainActivity 访问 mBroadcastReceiver。我该如何解决这个问题?

public class FragmentInfo extends Fragment {

//nested class BroadcastReceiver
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {

//from there we must update FragmentInfo UI
@Override
public void onReceive(Context context, Intent intent) {
//updateFragmentInfo(intent);
updateUiInfo();
//unregisterReceiver
((MainActivity)getActivity()).unregisterReceiver(mBroadcastReceiver);
}
};

private TextView textView3;
private TextView textView5;
private TextView textView7;
private TextView textView8;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//dynamic register BroadcastReceiver, for triggering intent when BT connection is established
//BroadcastReceiver can be registered static in ManifestFile
IntentFilter mIntentFilter = new IntentFilter();
//register message
mIntentFilter.addAction("bluetooth_established_intent");
//we must call registerReceiver from MainActivity!
((MainActivity)getActivity()).registerReceiver(this.mBroadcastReceiver,mIntentFilter);
}
}

编辑:我在调用 updateUIInfo 后注销了接收器,它现在可以工作了。我在代码中编辑。

最佳答案

好的做法是在 onResume 中注册广播接收器,在 onPause 中取消注册。因此,每次 fragment 对用户可见时,它都会注册接收器,而每次它变得不可见(被删除或被另一个 fragment 替换)时,它都会注销接收器。

关于java - 如何注销 fragment 中使用的Receiver?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17875573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com