Android 8.0 Oreo對開發人最重大的改變,背景服務不再永遠能夠運作了

By | 2017-08-31

Android 8.0定名為Oreo,在每次版本演進時都會帶入主要變革,如Android 6.0 Marshmellow帶來「危險權限」的實作,Android 7.x Nougat帶來「多視窗」,而Oreo的主要功能變革是「省電」,藉著限制背景服務來達到讓手機更省電的機制。

需要支援8.0嗎?

對於開發人員來說,新版的到來代表改版工作的開始,目前6.0市占率為32%,7.x為13.5%,就算是最新的7.x的13%也算是高的比率,在上架後若無法支援7.x,負評與客服電話會接到手軟的。

android version market share

android version market share

同樣的,一個開發人員能在新版本上市後快速改版APP並上架,這對能力與定位具備很高的加分與其優勢,經常昇級專業能力是軟體人員不可或缺的特質。Google自己的Pixel手機會第一個先昇級成Android Oreo,如果你的App不支援Android 8.0,當然就無法在這些前瞻手機中執行,很快的,問題單會排山倒海而來。

影響(Impact)

在前景的Activity完全不受新省電機制的影響,受影響的是在「背景」中的Activity所產生的背景服務,如果你的APP在背景時,完全不需要使用如Service,那你可以忽略這個問題。但假如你的APP原本需要在背景服務中更新「位置」、「資料」或「取得通知」等,那得要改寫你所有有關的Service了,因為,當你的Activity、Service在背景中一小段時間後,Android Oreo會殺掉你的Activity與服務,達到省電的目的。

有一些特殊應用的程式能比這一小段時間再多出幾分鐘的存活(執行)時間,如高優先權的Firebase Cloud Messaging接收與傳送或網路語音(VOIP)相關等,但也只多出那幾分鐘而已。

解決方法

那如果我真的需要定時執行必要工作時,那該怎麼辦呢? 請使用Android 5.0(Lollipop)時推出的JobScheduler,JobScheduler也常在Google認證Android開發員(Google Certified Associate Android Developoer, 簡稱AAD)的考題中出現,由類別名稱可得知,開發人員可定義時間如30分鐘,讓自己所設計的工作可以在30分鐘後被執行。JobScheduler的相關類別還有JobInfo與JobService,它現在有了更多的功能了,目的是要取代原本的Service與Intent Service。

位置取得與廣播接收

手機Location位置取得也同樣被限制一小時幾次存取,不論你使用原生的LocationManager或是Google Play Services的FuseLocation都一樣,原先使用Service/Intent Service的都會有問題。

之前,Android 6.0時推出危險權限時,還可以將APP專案先設為23以下,就可以正常在6.0的手機上執行,現在,不論你的Android app開發時設定為6.0、7.x,在Android 8.0 Oreo裝置上執行背景服務都會被限制,影響層面很大,身為開發人員不可不重視它啊。

除此之外,還有一些改變,如Implicit broadcast receiver等,記得要提早因應改版,否則造成app市占率降低事小,隨其而來的回報、後勤等問題才是頭痛啊。

相關文章:

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *