2011-05-12 61 views
1

只要最終用戶單擊「提交」按鈕,我需要運行一個進程。即使應用程序關閉,應用程序也需要每隔X分鐘Y次處理屏幕上的數據。因此,需要嘗試進行一些處理,直到發生以下情況之一: 1)處理對於提交的數據是成功的 2)處理已重試Y次並且仍然未成功 3)應用程序被操作系統終止或手機關閉。如何設置定時事件,即使應用程序已停止,它仍將繼續運行

如果最終用戶的手機仍然打開但應用程序已停止,請使用 正確的界面來完成此操作?

如果我使用Handler/Runnable,只有在應用程序保持活動狀態時纔可以使用。 AlarmManager看起來像是在您想要在特定時間運行處理時使用的。

任何建議將不勝感激!

+0

使用Android的'服務' – binnyb 2011-05-12 21:45:18

回答

1

你有兩個選擇:一個服務,或者建立與AlarmManager報警。你選擇哪一個主要取決於你想要重試的頻率。一分鐘?使用服務。一小時?一天?設置一個鬧鐘,這樣你就不會浪費手機資源,保持服務的活力。

http://developer.android.com/reference/android/app/Service.html

http://developer.android.com/reference/android/app/AlarmManager.html

+0

我會通過AlarmManager嘗試它:謝謝你的信息。 – charlest 2011-05-16 12:23:59

2

我用這個方法來設置報警。

private void setAlarm(){ 
    Context context = getApplicationContext(); 
    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, OnAlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 

    myCal = Calendar.getInstance(); 
    myCal.setTimeInMillis(myPrefs.getLong("time", 0)); 

    mgr.set(AlarmManager.RTC_WAKEUP, myCal.getTimeInMillis(), pi); 
    Log.i(myTag, "alarm set for " + myCal.getTime().toLocaleString()); 
    Toast.makeText(getApplicationContext(),"Alarm set for " + myCal.getTime().toLocaleString(), Toast.LENGTH_LONG).show(); 

} 

我onAlarmReciever onRecieve方法中是這樣的:

 Intent i = new Intent(context, AlarmActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 

當意圖激發所以基本上開始AlarmActivity。在這個活動中,你可以試試你在做什麼,如果它失敗,再次調用setAlarm()

+0

感謝您的信息。從答覆中,這聽起來像AlarmManager肯定是要走的路。 – charlest 2011-05-16 12:22:23

相關問題