我有一个网络广播接收器,它可以监听网络状态并在设备断开互联网时禁用某些操作,否则启用它们。问题是它只在退出并重新启动应用程序后才能运行。在初始运行时,即使互联网被切断,该应用也会表现相同。
我创建了一个名为NetworkStateReceiver
的课程:
public class NetworkStateReceiver extends BroadcastReceiver {
public interface NetworkListener {
void onNetworkAvailable();
void onNetworkUnavailable();
}
private NetworkListener networkListener;
public NetworkStateReceiver(NetworkListener networkListener) {
this.networkListener = networkListener;
}
public void onReceive(Context context, Intent intent) {
if (intent.getExtras().getBoolean(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
Log.d("app", "There's no network connectivity");
networkListener.onNetworkUnavailable();
} else {
Log.i("app", "Network connected");
networkListener.onNetworkAvailable();
}
}
}
我在MainActivity的onCreate
上实例化并注册它:
networkStateReceiver = new NetworkStateReceiver(new NetworkStateReceiver.NetworkListener() {
@Override
public void onNetworkAvailable() {
btnViewDiscoverFeed.setEnabled(true);
btnViewExplore.setEnabled(true);
btnViewNotification.setEnabled(true);
btnViewUserProfile.setEnabled(true);
setActiveFragment(activeFragment);
viewPager.disableScroll(false);
}
@Override
public void onNetworkUnavailable() {
btnViewDiscoverFeed.setEnabled(false);
btnViewExplore.setEnabled(false);
btnViewNotification.setEnabled(false);
btnViewUserProfile.setEnabled(false);
setActiveFragment(2);
viewPager.disableScroll(true);
}
});
registerReceiver(networkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
然后,我在onDestroy
上取消注册:
@Override
public void onDestroy(){
unregisterReceiver(networkStateReceiver);
super.onDestroy();
}
答案 0 :(得分:1)
分别在onStart(),onStop()上尝试注册和取消注册方法
活动注册BroadcastReceivers的唯一原因是以某种方式对当前活动使用事件,以通知用户事件。如果已调用onStop(),则Activity不再位于前台,因此无法更新User.but如果使用onCreate()和OnDestroy,如果系统终止您的进程,则无法保证调用onDestroy()为了节省内存。但是,如果该过程被终止,则该过程无论如何都不会接收广播