我在应用启动时调用了两个Web服务器,并且这些服务器在后台运行。
每项服务约需35-40秒。直到这些服务完成我在点击每个Tab时显示一个加载器,我的TabActiviy中有4个活动。 当这些服务完成时,我隐藏了加载程序并显示数据。
现在,我的问题是?如果网络出现故障,服务在后台运行是否有任何机会?我必须通过对话框向用户提供该网络中断的过程。
我有机会在android中每10秒或更短时间检查网络连接吗? 这样我就可以通过对话与用户建立亲密关系并恢复服务了吗?
提前致谢。
答案 0 :(得分:0)
当您使用HTTP连接时 - 使用try-catch环绕屏蔽您的网络数据并在发生某些事情时显示错误消息。
将Runnable
目标添加到Service
new Runnable() {
@Override
public void run() {
while(true){
if(socket.isConnected()){
}else{
// show error and call dialog
}
}
}
};
如果您使用套接字
答案 1 :(得分:0)
您可以使用Timer和Android ConnectivityManager:
new Timer().scheduleAtFixedRate(checkCon, 10, 10);
private boolean checkCon() {
ConnectivityManager conMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
if ( conMgr.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED
&& conMgr.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED) {
return false;
}
return true;
}
如果与移动设备的连接(conMgr.getNetworkInfo(0))和Wifi(conMgr.getNetworkInfo(1))断开连接,则 checkCon()
将返回false
。
答案 2 :(得分:0)
尝试使用以下代码。
TimerTask refresher;
// Initialization code in onCreate or similar:
timer = new Timer();
refresher = new TimerTask() {
public void run() {
handler.sendEmptyMessage(0);
};
};
// first event immediately, following after 1 seconds each
timer.scheduleAtFixedRate(refresher, 0, 65);
@SuppressLint("HandlerLeak")
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case REFRESH:
break;
default:
break;
}
}
};
它对我来说就像一个魅力..希望这会对你有所帮助。