接着上一篇《android O 對Service的限制【Background Execution Limits】》內容。java
咱們將解決下面兩個問題,並提出一個有趣的問題。android
- app處在空閒期(idle)時,如何啓動Service?
- 在App進入空閒期(idle)時,如何讓Service不被當即回收?
JobService,能夠再空閒時啓動JobService,可是JobService存在諸多限制,詳情請查閱官方文檔app
以bind的方式啓動Servicepost
APP處於空閒期時,雖然咱們不能直接調用Context.startService()方法,啓動Service。this
可是咱們能夠,以bind的形式啓動Service。google
這種方式啓動Service,將不受系統限制。spa
activity.getApplication().bindService(intent, connection, Service.BIND_AUTO_CREATE);
複製代碼
前面咱們提到,普通的Service,在App進入空閒期時,將會被系統回收。code
咱們有一個修飾詞 「普通的」 Service。cdn
那什麼樣的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);
複製代碼
咱們沒法經過Intent與Service通訊。 例如:之前咱們能夠經過 Context.startService(intent) 發送Inent給Service. 顯然如今咱們不能調用 經過Context.startService(intent) 發送Inent給Service.
- 那麼咱們應該如何發送Intent給Service,來實現與Service的通訊呢? 這是一個值得思考的問題。
下一篇一塊兒來討論這個有趣的問題。
讚美是一種美德,點個贊 再走啊,老鐵