关于BroadcastReceiver遇到的一个小问题记录

现象在BroadcastReceiver中定义的变量在每次接受到广播之后都会被重新赋初始值

 private boolean isNetworkAvailable = false;
/**
 * 监控网络变化
 */

public class NetworkConnectChangedReceiver extends BroadcastReceiver {
    private boolean isNetworkAvailable = false;//标识变量,表示当前网络是否连接

    @Override
    public void onReceive(Context context, Intent intent) {

        boolean isConnected = NetUtils.isConnected(context);

        System.out.println("isNetworkAvailable="+isNetworkAvailable+",isConnected="+isConnected);

        if (isConnected) {
            if (!isNetworkAvailable) {
                isNetworkAvailable = true;
                EventBus.getDefault().post(new NetworkChangeEvent(isConnected));
                Log.d("zzzzzzz1", isConnected + "");
            }

        } else {
            if (isNetworkAvailable) {
                isNetworkAvailable = false;
                EventBus.getDefault().post(new NetworkChangeEvent(isConnected));
                Log.d("zzzzzzz2", isConnected + "");
            }
        }


    }
}

官方的说法是:

A BroadcastReceiver object is only valid for the duration of the call to onReceive(Context, Intent). Once your code returns from this function, the system considers the object to be finished and no longer active.

广播接收器对象只在调用onReceive(上下文、意图)时有效。一旦代码从这个函数中返回,系统就会认为该对象已完成,不再活动。

因此在该类中保存的变量信息只能在本次调用中被使用,不会保存到下一次调用。所以,想要在该类中保存变量,只能通过其他方式进行。

改进办法:

/**
 * 监控网络变化
 */

public class NetworkConnectChangedReceiver extends BroadcastReceiver {


    @Override
    public void onReceive(Context context, Intent intent) {

        boolean isConnected = NetUtils.isConnected(context);


        if (isConnected) {
            if (!NetUtils.isNetworkAvailable) {
                NetUtils.isNetworkAvailable = true;
                EventBus.getDefault().post(new NetworkChangeEvent(isConnected));
                Log.d("BroadcastReceiver", isConnected + "");
            }

        } else {
            if (NetUtils.isNetworkAvailable) {
                NetUtils.isNetworkAvailable = false;
                EventBus.getDefault().post(new NetworkChangeEvent(isConnected));
                Log.d("BroadcastReceivers", isConnected + "");
            }
        }


    }
}

小知识点一个,开发的时候需要注意一下!

猜你喜欢

转载自blog.csdn.net/u013359807/article/details/81327715