2010-09-28 31 views
0

我有一個服務,產生一個線程,每3秒運行一個任務。即使手機處於待機狀態,我如何確保服務正在運行?

class MyService extends Service { 
    private Timer timer = new Timer(); 

    public int onStartCommand(Intent intent, int flags, int startId) { 
    TimerTask task = new TimerTask() { 
     public void run() { 
     // something important 
     } 
    }; 

    timer.scheduleAtFixedRate(task, 0, 3000); 
    return Service.START_STICKY; 
    } 
    ... 
} 

我的服務在我的手機處於開啓狀態時正常運行,但是當我的手機處於待機狀態時,服務通常沒有響應。

有關如何確保我的服務在待命狀態下運行的任何線索?

+0

即使手機在睡夢中,每三秒鐘運行一次,說你討厭你的用戶,或者至少討厭他們的電池。您的用戶很可能會因爲憎恨您的應用程序而作出迴應,將其關閉並在市場上給您一星評級。請進行這種配置並且更長時間(例如,每15分鐘)。然後按照Fuhcho的建議,使用'AlarmManager'就是一個很好的策略。在這裏看到更多:http://www.androidguys.com/2010/03/29/code-pollution-background-control/ – CommonsWare 2010-09-28 12:53:16

+0

@commonsware,不幸的是,我的服務不能等待15分鐘。 android 2.1不支持通過Android Cloud推送到Device消息,所以我必須手動輪詢,這就是爲什麼我每5秒運行一次任務。我接受任何其他你可能有的建議。 – javauser 2010-10-02 13:26:14

+1

「我願意接受任何其他建議」 - 1.不要編寫應用程序2.使用基於SMS的推送3.需要2.2並嘗試C2DM(注意,官方正式版)4.使用Urban Airship或其他第三方C2DM風格的引擎5.看看是否有其他人制作了WebSocket或Comet風格的長輪詢,以允許CPU在Android上重新入睡(這可能是因爲3G上的傳入數據包,基於網絡的開放式套接字明顯地作爲CPU喚醒觸發器,這就是VOIP應用程序可以工作的原因)6.無論如何,根據我的原始評論給予用戶控制權,因爲它是他們的手機,而不是你的手機。 – CommonsWare 2010-10-03 00:59:09

回答

1

也許使用通過AlarmManager類的警報。

相關問題