我在应用程序启动时调用了两个 Web 服务,它们在后台运行。
每项服务大约需要 35-40 秒。在这些服务完成之前,我会在单击每个选项卡时显示一个加载程序,我的 TabActiviy 中有 4 个活动。当这些服务完成时,我隐藏加载器并显示数据。
现在,我的问题是?如果网络出现故障,服务是否有机会在后台运行?,我必须如何通过对话框向用户提示该进程被网络中断。
我可以在 android 中每 10 秒或更短时间检查一次网络连接吗?这样我就可以通过对话与用户亲密并恢复服务?
提前致谢。
我在应用程序启动时调用了两个 Web 服务,它们在后台运行。
每项服务大约需要 35-40 秒。在这些服务完成之前,我会在单击每个选项卡时显示一个加载程序,我的 TabActiviy 中有 4 个活动。当这些服务完成时,我隐藏加载器并显示数据。
现在,我的问题是?如果网络出现故障,服务是否有机会在后台运行?,我必须如何通过对话框向用户提示该进程被网络中断。
我可以在 android 中每 10 秒或更短时间检查一次网络连接吗?这样我就可以通过对话与用户亲密并恢复服务?
提前致谢。
试试下面的代码。
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;
}
}
};
它对我来说就像一种魅力。希望这会对你有所帮助。
当您使用 HTTP 连接时 - 用 try-catch 包围会阻止您的网络数据并在发生某些事情时显示错误消息。
将Runnable
目标添加到您的Service
new Runnable() {
@Override
public void run() {
while(true){
if(socket.isConnected()){
}else{
// show error and call dialog
}
}
}
};
如果你在使用套接字
您可以使用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;
}
checkCon()
如果与移动设备 ( conMgr.getNetworkInfo false
(0)) 和 Wifi (conMgr.getNetworkInfo(1)) 的连接断开,则返回。