2012-03-14 23 views
7

是否可以攔截手機關機事件或者使用其他方法來解決此問題?我有一個始終運行的服務,它是收集一些分析數據的非市場應用程序的一部分。我想告訴分析結束會話和報告,然後恢復系統關閉。Android中的關機事件

我試過從服務的onDestroy或onShutdown部分觸發事件,但手機會關閉而沒有時間報告。

通過根據活動屏幕進行很多簡短的會話來解決此問題,可以生成我不希望避免的非感性分析信息。

回答

8

建立一個廣播接收器捕獲ACTION_SHUTDOWN意圖。

在onReceive()方法中,您可以完成您正在嘗試執行的操作。

http://developer.android.com/reference/android/content/Intent.html#ACTION_SHUTDOWN

+1

我有這個了,它已通過所有測試。 – 2012-03-14 20:04:59

+1

@TimCapes聽起來真棒! Android有太多的意圖拋出。爲了幫助你的數據收集,你可以捕獲BOOT_COMPLETE操作意圖,以便在手機啓動時啓動你的應用程序;) – jjNford 2012-03-14 21:48:23

+0

已經這樣做了在重新啓動時啓動服務,但是感謝你提及它。 – 2012-03-16 16:12:23

3

你可以嘗試註冊使用Runitme addShutdownHook(Thread hook)方法Shutwdown鉤。

的方法,另外的方法參考國家:

如果runFinalizersOnExit(布爾)一直被稱爲一個真正的說法, 垃圾收集和定稿將所有掛鉤 之後進行要麼完成或已失敗。然後VM終止。

因此,理論上直到線程完成後,VM纔會終止。

+1

感謝這個想法,它確實有一定的潛力。但是,當虛擬機實際關閉時以及其他事件發生時,文檔相當稀少。我認爲給出不清楚的文檔,我最好趕上關閉操作。如果遇到有關廣播接收器方法的任何問題,我會記住這一點。 – 2012-03-14 16:45:19

+1

@TimCapes你是對的,這個文件在這個問題上相當不清楚。 – 2012-03-14 16:51:27