使用android中的线程和服务每10秒重复一次任务

时间:2012-11-12 12:50:29

标签: android multithreading service

我在应用启动时调用了两个Web服务器,并且这些服务器在后台运行。

每项服务约需35-40秒。直到这些服务完成我在点击每个Tab时显示一个加载器,我的TabActiviy中有4个活动。 当这些服务完成时,我隐藏了加载程序并显示数据。

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

我有机会在android中每10秒或更短时间检查网络连接吗? 这样我就可以通过对话与用户建立亲密关系并恢复服务了吗?

提前致谢。

3 个答案:

答案 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(con​​Mgr.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;
                 }
             }
         };

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