2012-07-25 87 views
3

我有一個Android應用程序,它具有在後臺運行的服務,與遠程服務器通信,並在需要時向用戶顯示通知。該應用程序還有一個供用戶進行交互的活動。當應用程序被終止時取消Android鬧鐘

其中一個要求是應用程序需要在早上自動啓動。在一天結束時,用戶可以自由退出應用程序(退出功能會停止服務,釋放喚醒鎖,並讓Android終止進程)。爲了自動重新啓動應用程序,我使用的調度和AlarmManager一個的PendingIntent報警:

//create intent to alert OnStartReceiver when alarm goes off 
    Intent i = new Intent(context, OnStartReceiver.class); 
    i.setAction("com.pointtrace.intents.alarm"); 
    i.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION|Intent.FLAG_FROM_BACKGROUND); 


    //wrap inside PendingIntent so that it can be used from outside 
    //our application 
    PendingIntent pi = PendingIntent.getBroadcast(context, 1, i, PendingIntent.FLAG_ONE_SHOT); 

    AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

    Log.d("GXT", "Scheduling alarm action(i)=" + i.getAction()); 

    //set alarm to go off at wake time 
    alarms.set(AlarmManager.RTC_WAKEUP, getWakeTime(), pi); 

OnStartReceiver類被註冊爲接收廣播和報警時將重新啓動應用程序。

一切工作正常,除非用戶從任務管理器中殺死應用程序。如果應用程序通過被Android OS或我的電話System.exit(0)殺死而正常退出;它重新啓動正常。但是,當它從任務管理器中被殺時,看起來幾乎像是警報正在取消。

我在Android文檔中找不到任何暗示警報將被任務管理器取消的任何內容。關於如何正確設置警報,我做錯了嗎?

我試過刪除標誌,只使用0,但它沒有任何區別。

謝謝。

回答

4

退出功能停止服務,釋放喚醒鎖,並讓Android的殺掉進程

如果你是暗示你有一個連續WakeLock,除非這是唯一的設備是永遠運行插入,你的用戶會用鱒魚給你打耳光。

此外,Android可以在需要時終止進程。不要誤認爲startForeground()是一種保證Android永遠不會殺死你的進程的方式。

但是當它從任務管理器殺死看起來幾乎像報警正在取消。

我不知道什麼是「任務管理器」,因爲Android中沒有。如果您的意思是設置中正在運行的應用程序列表,然後單擊強制停止,那麼是的,即取消所有未完成的警報,並阻止您的應用程序再次運行,直到手動啓動您的某個組件爲止(例如,用戶從啓動器啓動您的應用程序)。

我在做錯了關於如何正確設置警報?

可能不是。強制停止絕對消滅你的警報。

+0

我指的是Android中的「任務管理器」應用程序。在某些設備上,可以通過設置/正在運行的應用訪問相同的功能,這是正確的。 – 2012-07-26 17:46:38

+0

「在設置中運行的應用程序列表,然後單擊強制停止,然後是,取消任何未完成的警報,並阻止您的應用程序再次運行,直到手動啓動您的某個組件爲止。」您是否可以發佈鏈接,以便記錄Google網站或某處?我想詳細瞭解它。 – 2012-07-26 17:47:55

+0

@AlexGdalevich:「我指的是Android中的」任務管理器「應用程序 - 沒有」任務管理器「應用程序作爲Android操作系統的一部分。最近的是將項目從近期任務列表中移出,但不會執行強制停止,並且不應取消您的警報。 「你可以發佈一個鏈接,它可能記錄在Google網站或某個地方嗎?」 - http://permalink.gmane.org/gmane.comp.handhelds.android.devel/157312 – CommonsWare 2012-07-26 18:58:47