2012-10-15 22 views
0

我想每秒調用一段代碼? 我已經試過以下 - 但是不知道如何每秒打電話?如何在Android中的後臺每秒鐘調用一段代碼

我該如何繼續呼叫new checkNWConnectivity()。execute(「Test」);每秒和從哪裏打電話在我的android程序???

private class checkNWConnectivity extends AsyncTask<String, Integer, String> { 
    @Override 
    protected String doInBackground(String... params) { 


       ConnectivityManager manager = (ConnectivityManager)getSystemService(MainActivity.CONNECTIVITY_SERVICE); 

       // 3G confirm 
       Boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnectedOrConnecting(); 

       // wifi confirm 
       Boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnectedOrConnecting(); 

       if(is3g){ 
        tvNWConnectivity.setText(" Connected to 3G"); 
       }else if(isWifi){ 
        tvNWConnectivity.setText(" Connected to wifi"); 
       }else{ 
        String text = " No Network Connectivity."+"\n" + " Uploading will be resumed from streamlet "+countStreamletUploaded.toString(); 
        tvNWConnectivity.setText(text); 
       }  


     return null; 
    } 

} 

所以我的問題是如何調用它的每一秒? 其實我想繼續運行的代碼部分doInBackground(字符串... PARAMS){...}

回答

1

您可以使用TimerTaskTimerHandler做到這一點:

public void toCallAsynchronous() { 

    TimerTask doAsynchronousTask; 
    final Handler handler = new Handler(); 
    Timer timer = new Timer(); 

    doAsynchronousTask = new TimerTask() { 
      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       handler.post(new Runnable() { 
        public void run() { 
         try { 
          checkNWConnectivity performBackgroundTask = new checkNWConnectivity(); 
          performBackgroundTask.execute(); 

          } catch (Exception e) { 
           // TODO Auto-generated catch block 
          } 

        } 
       }); 
       timer.schedule(doAsynchronousTask, 0,30000); //put the time you want 

    } 
+0

謝謝Parth。 它正在工作。 但是,當我在後臺啓動另一項工作時,此停止工作,當該工作完成時,它再次開始工作。 我想讓這個背景工作繼續工作。 這怎麼可能? 我們不能一起運行兩個後臺作業,可能會通過不同的線程? – Vishal

+0

檢查此鏈接:http://stackoverflow.com/questions/4068984/running-multiple-asynctasks-at-the-same-time-not-possible ..希望它有助於解決您的查詢 –

0

首先,你不能從非UI線程視圖的工作,所以你可以」請撥打電話TextView.setTextAsyncTask.doInBackground方法。你可以簡單地使用Handler並提交使用Handler.sendMessageDelayed

0

我這樣做的方式的消息每秒被放線程服務

服務將執行從一個非常大的數字倒計時器,所以它會從來沒有達到零,但這只是我的應用程序的用例,你可能需要一些永遠的東西

然後有操縱UI線程的困境。服務中的我的循環將在SharedPreferences中編輯一個變量,並且我的Activity有一個檢查SharedPreferences的循環,並且如果SharedPreferences返回一個特定的值,則解決問題時將更新UI對象。

您或許可以用廣播接收機做類似的事情

0

使用處理程序。

private class MyHandler extends Handler{ 
     @Override 
     public void handleMessage(Message message){ 

      YourAsyncTask task = new YourAsyncTask(...); 
      task.execute(); 
        this.sendMessageDelayed(new Message(), 1000);} 
} 

然後,當你想開始只是這樣做

MyHandler handler = new MyHandler(); 
handler.sendMessageDelayed(new Message(), 1000); 
2

你想使用ScheduledExecutorService

ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor(); 
exec.scheduleAtFixedRate(command, initialDelay, period, unit); 

創建您的活動的執行者OnCreate,啓動執行onResume並停止onPause。

然後您可以撥打runOnUiThread(action);將操作發回UI。

相關問題