采用 JetPack 技术 (注 在Androidx才可使用)
使用方式
1 添加依赖
implementation "android.arch.lifecycle:common-java8:1.1.1"
2 创建网络监听类
public class NetWorkStateReceive extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//自己实现需要监听的广播
}
}
3 创建Lifecycle无入侵代码
public class CustomNetworkStateManager implements DefaultLifecycleObserver {
private static final CustomNetworkStateManager S_MANAGER = new CustomNetworkStateManager();
private NetWorkStateReceive mNetworkStateReceive;
private CustomNetworkStateManager() {
}
public static CustomNetworkStateManager getInstance() {
return S_MANAGER;
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume(@NonNull LifecycleOwner owner) {
if (owner == null) return;
mNetworkStateReceive = new NetWorkStateReceive();
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
if (owner instanceof AppCompatActivity) {
((AppCompatActivity) owner).registerReceiver(mNetworkStateReceive, filter);
} else if (owner instanceof Fragment) {
((Fragment) owner).getActivity().registerReceiver(mNetworkStateReceive, filter);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause(@NonNull LifecycleOwner owner) {
if (owner == null) return;
if (owner instanceof AppCompatActivity) { //防止空指针 和多余创建
((AppCompatActivity) owner).unregisterReceiver(mNetworkStateReceive);
} else if (owner instanceof Fragment) {
((Fragment) owner).getActivity().unregisterReceiver(mNetworkStateReceive);
}
}
}
4 注册
在Fragment 或者Activity中使用 (写到BaseActivity或者BaseFragment)
getLifecycle() .addObserver(CustomNetworkStateManager.getInstance());
5 备注
已经写好了移除监听的操作,并且跟随Activity或者Fragment的生命周期执行,无需关系只需要自己写好广播的筛选和回调就可以了。
6 转载请备注地址,本文是全网首发,如若雷同定法律追究,其原理如果感兴趣抽时间给大家讲。
6.1 如果在别的页面接收不到请把静态单例和所有静态类删除修改下方可