我有一個消耗web服務的asynctask。現在我需要在一個小時內每天執行一次asynctask。 我想要做的是在AlarmManager中調用asynctask的doinbackground事件。我已閱讀關於使用AlarmManager的信息,但沒有關於在asynctask中使用它的文檔。 我該走向正確的方向嗎? 任何建議將高度apreciate如何在Alarmmanager內運行asynctask?
0
A
回答
0
第1步:創建一個在一天運行一次的報警管理器。 您可以根據自己的要求設定時間。我在這裏設定在早上7點。
int REPEATING_TIME = 24 * 60 * 60 * 1000;
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 06);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
Intent i = new Intent(context, DemoService.class);
PendingIntent pi = PendingIntent.getService(context,
202, i,
PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager alarmManager = (AlarmManager) context
.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), REPEATING_TIME, pi);
第2步:創建一個asynctask類並在那裏執行後臺操作。
public class LoadData extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
return "response";
}
}
第3步:創建一個擴展服務的類。
public class DemoService extends Service {
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
new LoadData(){}protected void onPostExecute(String result){
// anything you want to perform onPost.
};}.execute("API URL");
stopSelf();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
希望它能解決您的問題。
+1
在'Service'中使用'AsyncTask'是無意義的練習,AsyncTask被設計爲與UI交互(而「Service」沒有UI)。簡單地使用一個'IntentService'來管理自己的工作線程,並在工作完成時關閉。 – Squonk 2015-03-25 04:03:19
+0
你的觀點是對的,但有時我們不需要執行與UI相關的任務。就像我們只是想更新數據庫等 – 2015-03-25 04:35:30
相關問題
- 1. Android - AppWidgets,AlarmManager和AsyncTask
- 2. 如何運行多個AsyncTask?
- 3. 如何連續運行AsyncTask?
- 4. AlarmManager停止運行
- 5. 如何在AsyncTask中運行ProgressDialog
- 6. 如何在同一時間內運行asynctask?
- 7. 如何在AsyncTask doInBackground不運行,但在第二次它運行
- 8. Android如何在AsyncTask運行過程中停止/取消AsyncTask?
- 9. 在另一個asynctask中運行Asynctask類
- 10. 如何在運行時運行AsyncTask開始
- 11. 的AsyncTask內運行的調用removeCallbacks
- 12. 運行的AsyncTask doInBackground()從內部服務
- 13. AlarmManager未運行服務
- 14. 使用AlarmManager運行通知
- 15. 如何檢索AsyncTask的運行實例?
- 16. 如何多次運行同一個asynctask?
- 17. AsyncTask如何運行但不起作用?
- 18. 如何每分鐘運行一次AsyncTask?
- 19. AlarmManager在錯誤的時間運行
- 20. AsyncTask doInBackground不運行
- 21. AsyncTask,doInBackground()不運行
- 22. 並行運行的AsyncTask
- 23. 的AsyncTask意圖服務(W AlarmManager)
- 24. 設置AlarmManager在Android應用未運行時運行?
- 25. 如何在doInBackground在asynctask中運行時關閉對話框?
- 26. Android registerReceiver內部運行服務,等待AlarmManager系統msg
- 27. 如何從內部的AsyncTask
- 28. 爲什麼我不能在AsyncTask的doInBackground方法內運行ProgressDialog?
- 29. AsyncTask運行時的Android Splashscreen
- 30. 運行AsyncTask時looper錯誤?
爲什麼不使用[__IntentService__](http://developer.android.com/reference/android/app/IntentService.html)來執行WebService的工作,就像您每天在特定時間執行一次一樣。 – Bharatesh 2015-03-25 03:51:23
正如bharat所說,你應該使用'IntentService'而不是'AsyncTask'。您需要創建一個鬧鐘,在需要的時間發送廣播。使用'BroadcastReceiver'來監聽廣播,然後讓它啓動'IntentService'。在互聯網上有很多代碼示例,在這裏也是堆棧溢出 - 只是做一些搜索。 – Squonk 2015-03-25 04:01:04
@bharat我很困惑,爲什麼不使用asynctask,因爲文檔說它應該用於短操作,因爲調用web服務.. – montjoile 2015-03-25 04:56:47