2012-11-22 125 views
1

我正在構建一個android應用程序,運行時我需要在每分鐘撥打我的web服務器,如果用戶連接到某個網絡。android在運行應用程序時不時在後臺運行服務

我打算使用一項服務來打這個電話,但是我怎麼在每分鐘打電話呢? 我想我需要使用alaarm管理器,但我在哪裏初始化它?在我的開始活動?我只需要在我的應用運行時執行服務。

感謝您的幫助。

回答

4

如果只想在應用程序運行時調用服務器,則不需要使用警報管理器。還有其他選項,如

CoundDownTimer

主題

我在那種情況下喜歡CoundownTimer,你可以使用這樣

CountDownTimer countDownTimer = new CountDownTimer(1000000, 60 * 1000) { 

    @Override 
    public void onTick(long millisUntilFinished) { 
      // Do something on a tick. 
    } 

    @Override 
    public void onFinish() { 
     // Do something, maybe? 

     this.start(); 
    } 
}; 
countDownTimer.start(); 
+0

我已經測試你的代碼,它看起來像它會做我想做的。謝謝。在接受你的接受者之前,我會再等一會兒。 – brpaz

+0

多數民衆贊成不要忘記接受 –

+0

和如果我做了一個單獨的類爲http調用2小時的時間間隔後發送數據到服務器。 ?我不想在任何活動中執行此操作。 –

-1

呼叫使用AsynTask http://developer.android.com/reference/android/os/AsyncTask.html

在你的Web服務器onPost方法Asyn任務類等待一分鐘,然後調用AsynTask。

您可以通過使用下面的代碼調用AsynTask:

BLSyncingProcedure objSyncingProcedure=new BLSyncingProcedure(); 
     objSyncingProcedure.execute(HomeScreen.this); 

BLSyncingProcedure是你AsynTask類名。

1

試試這個::

您可以致電此計時器在你的活動,你想讓它

private Timer autoUpdate; 
@Override 
public void onResume() { 
    super.onResume(); 
    autoUpdate = new Timer(); 
    autoUpdate.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       public void run() { 
        //call your service from here 
       } 
      }); 
     } 
    }, 0, 60000);//set time interval according to your requirement 
} 

隨意問,如果你有任何疑問:)

0
在活動

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    TestAlarmMessageReceiver almesr = new TestAlarmMessageReceiver(this, time); 
} 

BroadcastReceiver:

public class TestAlarmMessageReceiver extends BroadcastReceiver { 


    public TestAlarmMessageReceiver() { 
    } 

    public TestAlarmMessageReceiver(Context context, int timeout) { //timeout in seconds 
     AlarmManager alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent intent = new Intent(context, TestAlarmMessageReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 
       PendingIntent.FLAG_CANCEL_CURRENT); 
     Calendar time = Calendar.getInstance(); 
     time.setTimeInMillis(System.currentTimeMillis()); 

     alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), 
       timeout*60*1000, pendingIntent); 
    } 

    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     arg0.startService(new Intent(arg0, TestMessageService.class)); 
    } 

} 

服務:

public class TestMessageService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     messageUpdateTask(); 
     return super.onStartCommand(intent, flags, startId); 
    } 

    private void messageUpdateTask(){ 
     GetMessagesUpdateAsyncTak getMessUpd = new GetMessagesUpdateAsyncTak(); 
     getMessUpd.execute(this); 
    } 
}