【问题标题】:Will NetworkInfo expire on network connection changes?NetworkInfo 会在网络连接更改时过期吗?
【发布时间】:2013-06-29 13:29:43
【问题描述】:

我有一些这样的代码:

public class NetworkHelper {
    private static NetworkInfo mNetworkInfo;

    public NetworkHelper(Context context) {
        mNetworkInfo = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    }

    private boolean isConnectedWifi(){
        return (mNetworkInfo != null && mNetworkInfo.isConnected() && mNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI);
    }
}

问题是,当设备的连接类型发生变化时,例如从 WiFi 网络切换到移动网络,静态引用 mNetworkInfo 是否仍然有效?我应该再次运行 getActiveNetworkInfo() 以获得“有效”值吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    这里的问题是getActiveNetworkInfo 是每次调用都返回一个new NetworkInfo 对象,还是只保留一个对象,每次调用时都会返回其引用。如果它每次都返回相同的对象,那么您的代码就可以正常工作。

    但是,我认为每次调用都可能返回一个新对象,因此您应该保留对ConnectivityManager 对象的引用并每次再次调用getActiveNetworkInfo。它不会对性能产生太大影响,最好还是安全一点。

    【讨论】:

    • 不知道你说的对不对,最后还是按照你的建议做了。
    • 如果您仍然担心,您可以比较 getActiveNetworkInfo 返回的 2 个不同的 NetworkInfo 对象的引用来确定。
    猜你喜欢
    • 1970-01-01
    • 2019-07-04
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多