接着上一篇《android O 對Service的限制【Background Execution Limits】》內容。
我們將解決下面兩個問題,並提出一個有趣的問題。
- app處在空閒期(idle)時,如何啓動Service?
- 在App進入空閒期(idle)時,如何讓Service不被立即回收?
1. App處於空閒期時,如何啓動一個Service?
-
以bind的方式啓動Service
APP處於空閒期時,雖然我們不能直接調用Context.startService()方法,啓動Service。
但是我們可以,以bind的形式啓動Service。
這種方式啓動Service,將不受系統限制。
activity.getApplication().bindService(intent, connection, Service.BIND_AUTO_CREATE);
2. 在App進入空閒期時,如何讓Service不被立即stop?
前面我們提到,普通的Service,在App進入空閒期時,將會被系統回收。
我們有一個修飾詞 “普通的” Service。
那什麼樣的Service是不普通的呢?換句話來說,什麼樣的Service,在APP進入空閒期時不會被stop。
Application.bindService()綁定的Service。
對你沒看錯,一定要是Application對象綁定上的Service纔不會被Stop。
一定要是Application對象bindService()一定要是Application對象bindService()
一定要是Application對象bindService()
如果是僅僅是被Activity對象綁定的話,APP進入空閒期後,Service依然都會被stop。
Intent in = new Intent(MainActivityV2.this, Service4.class);
activity.getApplication().bindService(intent, connection, Service.BIND_AUTO_CREATE);
3. bind的方式啓動Service依然存在缺陷
我們無法通過Intent與Service通信。
例如:以前我們可以通過 Context.startService(intent) 發送Inent給Service.
顯然現在我們不能調用 通過Context.startService(intent) 發送Inent給Service.
- 那麼我們應該如何發送Intent給Service,來實現與Service的通信呢?
這是一個值得思考的問題。
那麼問題來了,我們應該如何發送Intent給Service,來實現與Service的通信呢?
下一篇一起來討論這個有趣的問題。
原文鏈接:https://juejin.im/post/5dd16fb75188254eec44139c
讚美是一種美德,點個贊 再走啊,老鐵