2013-07-18 29 views
1

AccessibilityService與正常服務在系統內存管理方面有何不同?應該/可以在AccessibilityService中使用startForeground嗎?

我在問的是:系統是否會殺死一個AccessibilityService以保存內存,如果是這樣,當您進入輔助功能設置時,您會看到它打開還是關閉?用戶是否必須再次手動打開它?

將使用startForeground幫助保持AccessibilityService活着嗎?

在類似的問題中,重啓後,我的AccessibilityService不會被調用(onServiceConnected永遠不會被調用)。當我轉到「輔助功能設置」時,該服務將其顯示爲處於打開狀態。我必須將其關閉並打開它以便再次運行。有任何想法嗎?

回答

4

您不需要使用AccessibilityService的前臺通知來保持在後臺運行。這是服務的特例。

如果崩潰,框架將嘗試自動重新啓動您的輔助功能服務。如果它多次崩潰,則每次重新啓動需要更長的時間。這可能是爲什麼你的服務似乎已啓用,即使它沒有運行。

0

看看這裏:http://developer.android.com/guide/components/processes-and-threads.html

因爲AccessibilityService確實是一個服務,所以它可以像任何其他服務一樣被終止。既然它應該是一個綁定的服務,只要有一個綁定的活動,它就會一直活着。如果你的Activity沒有在onPause()或onStop()中解除綁定,那麼它在恢復時仍然會被綁定。這意味着onServiceConnected()將不會被調用。您仍然可以使用您在onBind()調用中返回的IBinder。

請閱讀「其他注意事項」:http://developer.android.com/guide/components/bound-services.html#Binding

使用etForeground()有助於保持活動狀態,從而爲它提供最高優先級。

+1

活動不應該直接綁定到AccessibilityServices,並且從API 16開始,它們不能通過權限來完成。框架在啓用時自動綁定到AccessibilityServices,因此不需要setForeground()。 – alanv

相關問題