為降低功耗,無論應(yīng)用的目標 SDK 版本為何, Android 8.0 都會對后臺應(yīng)用檢索用戶當前位置的頻率進行限制。

創(chuàng)新互聯(lián)服務(wù)項目包括尖扎網(wǎng)站建設(shè)、尖扎網(wǎng)站制作、尖扎網(wǎng)頁制作以及尖扎網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,尖扎網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到尖扎省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
系統(tǒng)會對前臺應(yīng)用和后臺應(yīng)用進行區(qū)分。應(yīng)用滿足以下任一條件即視為前臺應(yīng)用:
如果應(yīng)用在運行 Android 8.0 的設(shè)備上處于前臺,其位置更新行為將與 Android 7.1.1 (API 級別 25)及更低版本上相同。
調(diào)用 startForeground(NOTIFY_ID, noHelper.getNotification()); ,讓服務(wù)運行于前臺,此方法采用兩個參數(shù):唯一標識通知的整型數(shù)和狀態(tài)欄的 Notification 。
但是,如果您在服務(wù)正在前臺運行時將其停止,則通知也會被移除。
FrontNotificationHelper 類構(gòu)建一個通知,并通過 getNotification() 將 Notification 返回到 FrontService 。
目前主要使用的定位功能是 GPS 定位和百度地圖的定位服務(wù)。
我們不在 FrontService 直接調(diào)用 GPSLocationProvider 或者 BaiduLocationProvider ,而是另外再封裝一層 LocationHelper ,在 LocationHelper 中調(diào)用位置服務(wù)。
這樣做的好處是可以在 FrontService 切換使用 GPSLocationProvider 或者 BaiduLocationProvider ,而且 FrontService 中調(diào)用不變。
1.通知中心
用戶在通知界面可以發(fā)現(xiàn)頂部的快捷鍵有了更充裕的空間,并且根據(jù)網(wǎng)絡(luò)大數(shù)據(jù)的用戶使用頻繁度調(diào)整了這幾個快捷鍵的順序;并且長按推送消息可以看到一個開關(guān),操作它可以開啟和關(guān)閉這個該應(yīng)用的未來所有通知。
2.設(shè)置菜單
在新的AndroidO系統(tǒng)中,設(shè)置的界面有了大幅變化,主菜單的覆蓋性變得更廣,更多的功能將在子菜單中體現(xiàn),并且在菜單界面中重新設(shè)計了很多圖標。
3.PinnedShortcuts
iPhone6S中添加了一個蘋果的“獨家秘方”——3DTouch,自然安卓系統(tǒng)也不會放過這個好用的功能,于是就創(chuàng)造出了PinnedShortcuts功能,長按一個軟件后可以彈出子菜單,然后就可以通過這個方式快捷的使用該應(yīng)用的部分功能。
4.圖標形狀
新的系統(tǒng)中開發(fā)者可以使用不同的應(yīng)用圖標,比如圓角矩形或者圓形圖標,不過所有的圖標需要保證是同一個形狀,不能有一個方一個圓這樣“個性”的樣式出現(xiàn)。
5.后臺限制
AndroidO將進一步優(yōu)化后臺
畫中畫功能
程序,減少應(yīng)用在沒完全退出后占用系統(tǒng)的資源,并且減少電量的消耗,進一步向iOS學習。
6.安裝限制
新系統(tǒng)中用戶可以在權(quán)限設(shè)置中添加安裝限制功能,這樣可以有效的避免帶有中國特色的“全家桶”行為。
7.TensorFlowLite
這個新功能并不會直接體現(xiàn)在手機和系統(tǒng)中,它是谷歌的一項新技術(shù),用來把人工智能在更多的軟件上繼續(xù)拓展,并提高工作處理的效率,讓你的手機更“聰明”。
8.分屏
在AndroidO中,分屏畫中畫功能得到了強化,變得更加流暢,而且懸浮窗可以隨意拖動位置,然后在主屏幕中繼續(xù)工作[2]?。
Notification Dots
正在播放視頻的窗口可以懸浮在其他正在使用的App上方,用戶可以完成多任務(wù)操作。此前,三星和LG等手機廠商自行“改造”安卓系統(tǒng),已經(jīng)融入這一功能好多年[3]??。
9.NotificationDots
在谷歌的Pixel手機上,安卓8還新加了通知功能Notification Dots,會標出用戶的行程、信息等,有些通知還可以被設(shè)定為稍后提醒。此外長按某個應(yīng)用圖標現(xiàn)在可以顯示一些信息,與iOS上的3D Touch類似,這項功能在安卓7.0上已經(jīng)有所體現(xiàn)[3]??。
10.SmartTextSelection
系統(tǒng)將會預(yù)測用戶將使用某些電話或者其他選項出現(xiàn)在將會用到的應(yīng)用中,舉個例子就是如果邀請朋友來吃飯,系統(tǒng)會根據(jù)發(fā)送的地址來開啟地圖并且導(dǎo)航[2]??。
11.自動保存密碼
這個功能將會保存用戶的部分帳號和密碼,用于在網(wǎng)站或者應(yīng)用中的快速登錄,效率提升了不少[2]??。
12.GooglePlayProtect
這個功能主要用于GooglePlay中,下載的應(yīng)用和游戲?qū)?jīng)過它的排查,來看看是否是有害甚至攜帶病毒的應(yīng)用,不過國內(nèi)用戶可能不能訪問GooglePlay[2]??。
13.應(yīng)用加速
在AndroidO中,大部分應(yīng)用的啟動速度將會快上一倍,這個要歸
符合Unicode 10標準的表情符號
功于新系統(tǒng)的優(yōu)化,使后臺占用資源減少,并且對并發(fā)進程等問題的處理更加出色,也是個相當有用的功能[2]??。
14.字體優(yōu)化
AndroidO中谷歌還增加了對系統(tǒng)字體的更多支持,開發(fā)者可以自行更改字體樣式,讓用戶有了更多字體的選擇[2]??。
15.表情符號
安卓8還帶來了符合Unicode 10標準的表情符號,比原來新加超過60個表情符,這也是比較明顯的改變之一
谷歌剛剛發(fā)布了Android O技術(shù)預(yù)覽版,為了提升續(xù)航和減少耗電,Android進一步限制了后臺服務(wù)的運行。本文將為大家介紹Android O新增的后臺服務(wù)限制,翻譯自Android O開發(fā)者博客,原文在 這里 。
當應(yīng)用在后臺運行時,仍然會占用系統(tǒng)的內(nèi)存。如果在后臺運行的應(yīng)用比較多,并且用戶正在玩游戲或者看視頻的時候,那么很容易會導(dǎo)致系統(tǒng)卡頓。為了提升用戶體驗,Android O增加了對后臺應(yīng)用的限制。這篇文章將介紹系統(tǒng)對后臺應(yīng)用運行的限制,以及開發(fā)者應(yīng)該如果修改應(yīng)用以適應(yīng)這個限制。
在Android系統(tǒng)中,很多應(yīng)用和服務(wù)是可以同時運行的。比如說,用戶可以在一個窗口中玩游戲,在另一個窗口中瀏覽網(wǎng)頁,同時使用第三個應(yīng)用來聽音樂。同時運行的應(yīng)用越多,系統(tǒng)的負載就越大。如果又有其他的應(yīng)用或者服務(wù)在后臺運行的話,那么又會增加系統(tǒng)的負載,最后導(dǎo)致系統(tǒng)卡頓,影響到用戶體驗,比如正在播放的音樂會突然停止。
為了減少系統(tǒng)卡頓,Android O限制那些用戶不再直接交互應(yīng)用的運行。針對targetSdkVersion是Android O的應(yīng)用,Android增加了以下兩種方式的限制:
大多數(shù)情況下,應(yīng)用可以使用 JobScheduler 的Jobs來繞開上述的限制。即使應(yīng)用沒有處于運行狀態(tài),應(yīng)用可以安排 JobScheduler 的Jobs來執(zhí)行什么工作,系統(tǒng)會在不影響用戶體驗的情況下,調(diào)度這些Jobs的運行。
后臺服務(wù)會占用系統(tǒng)資源,這個會導(dǎo)致糟糕的用戶體驗。為了解決這個問題,Android O對應(yīng)用的后臺服務(wù)增加了一堆的限制。注意這些限制僅僅是針對targetSdkVersion為Android O的應(yīng)用,targetSdkVersion為25或者以下的應(yīng)用不受影響。
系統(tǒng)會區(qū)分前臺和后臺應(yīng)用。當滿足以下任意一個條件時,系統(tǒng)判定應(yīng)用是前臺的:
以上條件都不滿足,那么應(yīng)用就被系統(tǒng)認為是后臺應(yīng)用。
前臺應(yīng)用可以自由地運行前臺和后臺服務(wù)。當應(yīng)用進入后臺之后,它仍然有幾分鐘的時間窗口來啟動和運行服務(wù)。當這個時間窗口到期時,應(yīng)用就進入空閑狀態(tài),系統(tǒng)將停止應(yīng)用的后臺服務(wù)運行,這個操作和服務(wù)的 Service.stopSelf() 方法被調(diào)用類似。
某些情況下,后臺應(yīng)用會被臨時加入到白名單中運行幾分鐘。應(yīng)用在白名單中時,它可以啟動服務(wù)而不受限制,并且后臺服務(wù)也被運行。當需要處理對用戶可見的任務(wù)時,應(yīng)用將被添加到白名單中,比如:
大多數(shù)時候,你的應(yīng)用都可以用 JobScheduler 替換掉后臺服務(wù)。比如,CoolPhotoApp需要檢查用戶是否接收到好友分享的圖片,即使應(yīng)用不在前臺運行。按照之前的做法,應(yīng)用需要使用后臺服務(wù)去執(zhí)行這個任務(wù)。升級到Android O后,開發(fā)者需要用按一定周期運行的Job替換掉后臺服務(wù)來執(zhí)行,查詢服務(wù)器,完成后退出。
在Android O之前,創(chuàng)建一個前臺服務(wù)的通常做法是先創(chuàng)建一個后臺服務(wù),然后將其提升到前臺 。但這個做法到了Android O已經(jīng)失效了。Android O提供了另外一個方法[ NotificationManager.startServiceInForeground() ]( (android.content.Intent , int, android.app.Notification)),來創(chuàng)建前臺服務(wù)。用這個方法創(chuàng)建的新服務(wù)永遠不會進入后臺,所以不會受到后臺服務(wù)的運行限制。
如果應(yīng)用注冊了廣播,那么只要有廣播發(fā)送,應(yīng)用的廣播接收器就會自動運行,占用系統(tǒng)資源。當很多應(yīng)用都注冊了某個系統(tǒng)事件廣播時,那么就會出現(xiàn)性能問題,因為當系統(tǒng)事件觸發(fā)廣播時所有的應(yīng)用的接收器在很短的時間內(nèi)都會被順序運行,這樣就會影響用戶體驗。為了解決這個問題,Android 7.0增加了對廣播的限制。Android O進一步加強了這個限制。
大多數(shù)情況下,應(yīng)用之前注冊的隱式廣播可以用功能類似的 JobScheduler 的job替代。比如,一個社交圖片類- -應(yīng)用經(jīng)常會在設(shè)備充電時,清除使用過程中產(chǎn)生的數(shù)據(jù)。該應(yīng)用會在Manifest注冊ACTION_POWER_CONNECTED廣播,當接收到這個廣播是,執(zhí)行清理的工作。升級到Android O時,應(yīng)用需要刪除注冊的這個廣播,然后使用一個清理的job,這個job會在設(shè)備空閑并且充電時自動觸發(fā)執(zhí)行。
有一部分隱式廣播是不受這個限制的,應(yīng)用可以繼續(xù)在Manifest中注冊使用,不管應(yīng)用的targetSdkVersion是多少。這部分不受限制的廣播,可以查看 Implicit Broadcast Exceptions 。
上面介紹的這些變化不會影響到targetSdkVersion是25或者以下的應(yīng)用 。但是如果應(yīng)用是targetSdkVersion是Android O對應(yīng)的API級別,需要修改應(yīng)用以遵守這些新的限制。
如果應(yīng)用在空閑狀態(tài)仍然在運行后臺服務(wù),那么你需要替換掉這些后臺服務(wù)。可以采用如下的方案:
檢查在Manifest注冊的廣播,替換掉隱式廣播:
Android O 允許以畫中畫 (PIP) 模式啟動操作組件。PIP 是一種特殊的多窗口模式,最常用于視頻播放。目前,PIP 模式可用于 Android TV,而 Android O 則讓該功能可進一步用于其他 Android 設(shè)備。
當某個 Activity 處于 PIP 模式時,它會處于暫停狀態(tài),但仍應(yīng)繼續(xù)顯示內(nèi)容。因此,您應(yīng)確保您的應(yīng)用在 onPause() 處理程序中進行處理時不會暫停播放。相反,您應(yīng)在 onStop() 中暫停播放視頻,并在 onStart() 中繼續(xù)播放。如需了解詳細信息,請參閱 多窗口生命周期 。
要指定您的 Activity 可以使用 PIP 模式,請在清單中將 android:supportsPictureInPicture 設(shè)置為 true。(從 Android O 開始,如果您打算在 Android TV 或其他 Android 設(shè)備上支持 PIP 模式,則無需將 android:resizeableActivity 設(shè)置為 true;只有在您的 Activity 支持其他多窗口模式時,才需要設(shè)置 android:resizeableActivity。)
多窗口模式不會更改 Activity 生命周期 。
在多窗口模式中,在指定時間只有最近與用戶交互過的 Activity 為活動狀態(tài)。 該 Activity 將被視為頂級 Activity。 所有其他 Activity 雖然可見,但均處于暫停狀態(tài)。 但是,這些已暫停但可見的 Activity 在系統(tǒng)中享有比不可見 Activity 更高的優(yōu)先級。 如果用戶與其中一個暫停的 Activity 交互,該 Activity 將恢復(fù),而之前的頂級 Activity 將暫停。
Android O 引入一種新的對象 PictureInPictureParams ,您可以將該對象傳遞給 PIP 函數(shù)來指定某個 Activity 在其處于 PIP 模式時的行為。此對象還指定了各種屬性,例如操作組件的首選縱橫比。
現(xiàn)在, 在添加畫中畫 中介紹的現(xiàn)有 PIP 函數(shù)可用于所有 Android 設(shè)備,而不僅限于 Android TV。此外,Android O 還提供以下函數(shù)來支持 PIP 模式:
您的應(yīng)用可以決定何時觸發(fā) PIP 模式。以下是一些關(guān)于何時進入 PIP 模式的示例:
PIP 窗口為 240x135 dp,在屏幕角落的最頂層顯示,由系統(tǒng)在四個角落中選擇一個角落。 用戶可以調(diào)出 PIP 菜單,將 PIP 窗口切換為全屏,或通過按下遙控器上的主頁按鈕關(guān)閉 PIP 窗口。 如果主屏幕開始播放另一個視頻,PIP 窗口將自動關(guān)閉。 用戶還可以通過“最近使用記錄”關(guān)閉 PIP 窗口。
PIP 利用 Android N 中提供的多窗口 API 顯示固定視頻層疊窗口。 如需將 PIP 添加到應(yīng)用,您需要注冊支持 PIP 的 Activity,然后根據(jù)需要將 Activity 切換到 PIP 模式,并確保隱藏所有 UI 元素,且 Activity 處于 PIP 模式時視頻繼續(xù)播放。
默認情況下,系統(tǒng)并不自動為應(yīng)用提供 PIP 支持。如果想要應(yīng)用支持 PIP,請將 android:supportsPictureInPicture 和 android:resizeableActivity 設(shè)置為 true,在清單中注冊視頻 Activity。 此外,應(yīng)明確指定 Activity 處理布局配置變更,這樣,在 PIP 模式過渡期間發(fā)生布局變更時,Activity 不會重新啟動。
在注冊 Activity 時,請記住,在 PIP 模式中,您的 Activity 在電視屏幕上的小層疊窗口中顯示。 視頻播放 Activity 結(jié)合以盡量小的 UI 可以實現(xiàn)最佳用戶體驗。 在切換到 PIP 模式后,UI 元素較小的 Activity 帶來的用戶體驗可能較差,因為用戶在 PIP 窗口中看不到 UI 元素的詳細信息。
在需要將 Activity 切換到 PIP 模式時,請調(diào)用 Activity.enterPictureInPictureMode()。在下面的示例中,當用戶選擇媒體控制欄上的專用 PIP 按鈕時,系統(tǒng)切換到 PIP 模式:
在媒體控制欄上添加 PIP 按鈕可以方便用戶在控制視頻播放的同時切換到 PIP 模式。
Android N 中包含一個新的 PlaybackControlsRow.PictureInPictureAction 類,它可以定義控制欄 PIP 操作并使用 PIP 圖標。
在 Activity 進入 PIP 模式時,Activity 應(yīng)僅顯示視頻播放。 在 Activity 進入 PIP 模式前刪除 UI 元素,當 Activity 再次全屏顯示時恢復(fù)這些元素。重寫 Activity.onPictureInPictureModeChanged() 或 Fragment.onPictureInPictureModeChanged(),并根據(jù)需要啟用或禁用 UI 元素,例如:
在 Activity 切換到 PIP 模式時,系統(tǒng)會認為 Activity 處于暫停狀態(tài),并調(diào)用 Activity 的 onPause() 方法。 如果 Activity 因為 PIP 模式暫停,視頻播放不應(yīng)暫停,而是應(yīng)繼續(xù)播放。 在 Activity 的 onPause() 方法中檢查 PIP,并對播放做相應(yīng)處理,例如:
當 Activity 退出 PIP 模式并回到全屏模式時,系統(tǒng)會恢復(fù) Activity 并調(diào)用 onResume() 方法。
在您的應(yīng)用中,用戶可以在瀏覽主屏幕中的內(nèi)容時選擇一個新的視頻,視頻播放 Activity 處于 PIP 模式。 在現(xiàn)有播放 Activity 中全屏模式下播放新視頻,而不是啟用可能使用戶感到困惑的新 Activity。
若要確保視頻播放請求使用的是單個 Activity 并根據(jù)需要進入或退出 PIP 模式,在您的清單中將 Activity 的 android:launchMode 設(shè)置為 singleTask:
在您的 Activity 中,替換 Activity.onNewIntent(),處理新視頻,如果需要,停止任何現(xiàn)有視頻播放。
PIP 用于全屏播放視頻的 Activity。在 Activity 切換到 PIP 模式時,應(yīng)避免顯示除視頻外的其他內(nèi)容。根據(jù)處理畫中畫模式中的 UI 中所述,在 Activity 進入 PIP 模式時進行跟蹤,并隱藏 UI 元素。
由于 PIP 窗口懸浮在屏幕的角落,因此應(yīng)避免在主窗口被 PIP 窗口遮擋的任何區(qū)域顯示重要信息。
當 Activity 處于 PIP 模式時,其默認不獲取輸入焦點。要在 PIP 模式中接收輸入事件,請使用 MediaSession.setMediaButtonReceiver()。
Android系統(tǒng)環(huán)境是64bit, 最近在預(yù)制一個第三方app, 發(fā)現(xiàn)預(yù)制完之后運行有問題,沒有按照自己期望的32bit運行,而且按照默認64bit方式運行,導(dǎo)致加載的庫錯誤,啟動閃退, 編譯的時候有添加LOCAL_MULTILIB := 32。
根據(jù)google官網(wǎng),之前添加LOCAL_MULTILIB := 32一般都沒有問題,于是很好奇,就查了下這個問題原因。網(wǎng)上搜索說android系統(tǒng)會把同一個uid進程,調(diào)整為同一個abi,也就是說系統(tǒng)簽名(uid=system)app要么全是32bit,要么全是64bit。
打開PackageManagerService里面打印,跟蹤下平臺ABI適配情況,從打印看因為launch默認是64bit運行的,所以把其他system進程也全部調(diào)整為64bit。
從上面的日志,大概可以知道為什么這個app變成了64bit位運行了,下面也了解下android系統(tǒng)是怎么運行32/64bit 應(yīng)用和加載對應(yīng)的32/64bit庫。
/data/system/packages.xml記錄了系統(tǒng)安裝的apk信息,primaryCpuAbi="armeabi-v7a" 是32bit安裝,primaryCpuAbi="arm64-v8a 指示64bit安裝,dumpsys package xxx 也可以查看安裝信息。如果是64位安裝就會64bit運行,加載64bit運行庫。
這篇文檔對Android.mk里面LOCAL_MULTILIB分析寫的比較到位,也做了很多實驗,總體結(jié)論是,LOCAL_MULTILIB :=32會拷貝32bit庫到apk安裝的路徑,根據(jù)上面apk‘運行cpu api確定流程’可以知道,系統(tǒng)會根據(jù)lib庫確定是32bit還是64bit, 如果確定了是32bit,最后還要根據(jù)系統(tǒng)同一個組uid的進程,調(diào)整cpu api, 這樣最終確定當前apk安裝的abi, 所以LOCAL_MULTILIB是間接影響apk最終是32bit,還是64bit運行,主要是保證拷貝abi庫位數(shù)正確。
Android L開始 APK 64bit 32bit 運行環(huán)境原理及決定運行環(huán)境的規(guī)則
不帶庫的apk把LOCAL_PREBUILT_JNI_LIBS 相關(guān)的刪除掉,帶庫的根據(jù)abi需要修改下lib/armeabi-v7a目錄。
Android官網(wǎng) - 了解 64 位版本
Android內(nèi)置系統(tǒng)apk問題_Letcos-程序員信息網(wǎng)
Android 64bit系統(tǒng)中app以32bit運行
Android源碼預(yù)制基礎(chǔ)
Android L開始 APK 64bit 32bit 運行環(huán)境原理及決定運行環(huán)境的規(guī)則
文章標題:androido,Androidoneapp_v 202
本文路徑:http://chinadenli.net/article16/dsgdggg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、手機網(wǎng)站建設(shè)、面包屑導(dǎo)航、云服務(wù)器、微信公眾號、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)