2011-09-28 39 views
3

我聽說在服務中有一個異步任務並不好。使用AsyncTask服務

對於AsyncTask或只是onStartCommand()真的有必要嗎?

我想知道,因爲我有一個ServiceAsyncTask由警報啓動。它不止一次啓動Service;它只能啓動一次。

難道這是原因嗎?

編輯:

這是我如何設置報警。

String alarm = Context.ALARM_SERVICE; 

    AlarmManager am = (AlarmManager)getSystemService(alarm); 

    Intent Aintent = new Intent("REFRESH_THIS"); 
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, Aintent, 0); 
    Calendar calendar = Calendar.getInstance(); 
    calendar.add(Calendar.HOUR_OF_DAY, 9); 
    calendar.add(Calendar.MINUTE, 0); 
    calendar.add(Calendar.SECOND, 0); 
    calendar.add(Calendar.MILLISECOND, 0); 

    am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis() , AlarmManager.INTERVAL_DAY, pi); 

回答

3

如果你有一個服務長時間運行的操作,可以考慮使用IntentService,它將啓動和管理後臺線程你。而且它具有自動完成時關閉的附加好處。您可以通過AsyncTask獲得類似的結果,但IntentService可以做正確的事情。

至於您的其他問題,多次啓動的服務與AsyncTask無關。如果您的警報運行多次,它將啓動您的服務的多個實例。 AFAIK沒有辦法自動生成單件服務。你可以檢查它是否啓動之前運行,或者設置一個偏好標誌(容易出錯),但首選的方法是有短暫的服務發佈的每一個你需要做的事情的時間,並在完成後把自己關。很好地適合這種模式。

+0

檢查出我的編輯與我如何設置報警 – yoshi24

5

如果你想在服務中使用AsyncTask沒有什麼不好的。 如果您在服務中使用asynctask,這很好,因爲服務在主線程上運行,因此如果您使用長時間的服務流程,它可能會減慢您的用戶界面。

你也可以創建線程並在其中工作。