-1

我在应用程序启动时调用了两个 Web 服务,它们在后台运行。

每项服务大约需要 35-40 秒。在这些服务完成之前,我会在单击每个选项卡时显示一个加载程序,我的 TabActiviy 中有 4 个活动。当这些服务完成时,我隐藏加载器并显示数据。

现在,我的问题是?如果网络出现故障,服务是否有机会在后台运行?,我必须如何通过对话框向用户提示该进程被网络中断。

我可以在 android 中每 10 秒或更短时间检查一次网络连接吗?这样我就可以通过对话与用户亲密并恢复服务?

提前致谢。

4

3 回答 3

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;
                 }
             }
         };

它对我来说就像一种魅力。希望这会对你有所帮助。

于 2012-11-12T13:10:56.020 回答
0

当您使用 HTTP 连接时 - 用 try-catch 包围会阻止您的网络数据并在发生某些事情时显示错误消息。

Runnable目标添加到您的Service

new Runnable() {

    @Override
    public void run() {
        while(true){
            if(socket.isConnected()){

            }else{
                // show error and call dialog
            }
        }
    }
};

如果你在使用套接字

于 2012-11-12T13:00:13.633 回答
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;
}

checkCon()如果与移动设备 ( conMgr.getNetworkInfo false(0)) 和 Wifi (conMgr.getNetworkInfo(1)) 的连接断开,则返回。

于 2012-11-12T13:01:06.540 回答