当前位置: 代码迷 >> Android >> Anroid 网络状态的广播有关问题求解
  详细解决方案

Anroid 网络状态的广播有关问题求解

热度:17   发布时间:2016-05-01 10:45:07.0
Anroid 网络状态的广播问题求解
本帖最后由 u010224809 于 2013-04-17 14:59:45 编辑
当我在Activity 里面里面注册了一个监听网络状态的广播 
   @Override
    protected void onStart() {
        super.onStart();
        registerReceiver(mNetworkReceiver, new IntentFilter(
                ConnectivityManager.CONNECTIVITY_ACTION));
    }
    
    取消广播 
protected void onStop() {
        super.onStop();
        unregisterReceiver(mNetworkReceiver);
    };

1,为什么每次打开打开aictvity的时候都会执行一次BoradCastReceiver里面的OnReceive 方法,即使没有网络状1态改变。 
2,网络状态改变的广播是源码文件里的那个文件的那个方法发起的。

                                      谢谢
android,网络,状态,广播,

------解决方案--------------------
每次打开,不都会重新注册吗
------解决方案--------------------
Android 4.0网络编程详解中文版(全)
下载地址:
http://download.csdn.net/detail/wangxiangdong_sl/5267919
------解决方案--------------------
引用:
每次打开,不都会重新注册吗


+1
------解决方案--------------------
xml里面注册了吗
------解决方案--------------------
引用:
引用:每次打开,不都会重新注册吗 每次打开是要重新注册,刚才没说清楚,我想问的就是为什么每次注册都会执行一次OnReceive 即使没有网络变化

这是Receiver机制,监听网络状态,网络未连接也是一种状态
说到底,连没连接,不去查一下,谁会知道呢?特别是刚注册的,你说不是吗




------解决方案--------------------
网络状态上报好像是和Servicestate,GsmServcieStateTracker这两个java类有关吧,你说得网络状态是指哪些状态呢? 是否连网,还是信号强度,网络类型
------解决方案--------------------
应是给了个初始状态
------解决方案--------------------
引用:
本帖最后由 u010224809 于 2013-04-17 14:59:45 编辑当我在Activity 里面里面注册了一个监听网络状态的广播 
   @Override
    protected void onStart() {
        super.onStart();
        registerReceiver(mNetworkReceiver, new IntentF……


每次打开Activity的时候  LZ的onCreate方法应该是每次执行了一次  所以就执行了onReceive方法


至于网络状态的改变是源码中的ConnectivityManager.java中处理的
可以看下 http://blog.csdn.net/lvron/article/details/7098771


------解决方案--------------------
顶1L 。 

  一般的做法是在onAttachedWindow()注册, 在onDetached()取消注册 。

   添加一个boolean 标记 判断是否已经注册过了。
------解决方案--------------------
注册的时候,都会调用一下。