最近做过一个客户端项目,客户要求如果在无网络的情况下打开客户端,在连上网络的同时需要刷新当前打开页面的数据。
思考良久,因为我的架构是http+各种请求基类+各种实现子类,那我可以用 广播+接口+Application+接口实现类实现,这就避免了比较麻烦的情况出现,下面即是全部流程。
广播(ConnectionChangeReceiver)
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/81178cc93a2a3bb5048d90d76e7ec935.gif)
/** * 网络状态改变监听状态 调用刷新方法 * @author YuanShuQiao * */ public class ConnectionChangeReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(null==MyApplication.activitys||MyApplication.activitys.isFinishing()) return; if(null==MyApplication.connectionListeners) return; ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null&&networkInfo.isConnectedOrConnecting()) MyApplication.connectionListeners.restartLoad(); } }
Application声明当前页面接口类
public static ConnectionListener connectionListeners;
页面刷新接口类
/** * 网络状态改变调用接口 * @author YuanShuQiao * */ public interface ConnectionListener { public void restartLoad(); }
请求基类实现页面刷新接口类
public class StLoadableActivity extends Activity implements StTaskListener ,ConnectionListener
重写刷新接口方法
public void restartLoad() { //代码自理 }
主配置文件声明相关广播
<receiver android:name="xxx.xxx.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
相关权限依据个人需求酌情添加