Android 9 Pie 正式版總結(jié)

  • 先聲明下童漩,以下的整理的資料一部分來源于公眾號(hào)谷歌開發(fā)者,一部分來源于谷歌安卓官方網(wǎng)站(不用翻墻惋戏,gogogo)赦拘,還有小部分自己的理解忽冻。

    Android 9

  • 微信公眾號(hào)號(hào)谷歌開發(fā)者推送了 Android 9 Pie 現(xiàn)已面向全球正式發(fā)布!,就去更新 Android API 28,想看看正式版那些功能雌团,就發(fā)生了如下的故事

釘釘工作群

這是我的電腦IP地址
我的電腦IP.png

和領(lǐng)導(dǎo)的聊天記錄
  • 然后我的電腦就被限制速度了燃领,為了同事們能夠好好工作,現(xiàn)在模擬器鏡像都不能下載了锦援!哈哈
  • 雖然不能完成Android 9有些 api的具體的效果猛蔽,先mark下,后續(xù)再來添上

  • 今天我終于把API 28的源碼下載下來了。哈哈曼库!

動(dòng)態(tài)電量管理

1区岗、應(yīng)用待機(jī)分組

  • Android P 新增加應(yīng)用待機(jī)分組的功能,讓系統(tǒng)根據(jù)用戶的使用情況而限制應(yīng)用調(diào)用CPU或網(wǎng)絡(luò)等設(shè)備的資源, 應(yīng)用待機(jī)分組是 Android P 新添加的一項(xiàng)電量管理功能毁枯,它能根據(jù)應(yīng)用的使用頻率或者最近一次使用時(shí)間慈缔,對(duì)其資源請(qǐng)求進(jìn)行優(yōu)先級(jí)排序!
  • 優(yōu)先分組 在默認(rèn)的情況下种玛,系統(tǒng)會(huì)更具應(yīng)用的近期的使用的情況進(jìn)行等級(jí)劃分藐鹤,應(yīng)用活躍度越高,所處的分組優(yōu)先級(jí)就越高赂韵,也更加容易獲取設(shè)備的資源娱节;第二種是系統(tǒng)安裝了通過利用機(jī)器學(xué)習(xí)預(yù)加載的應(yīng)用,從而預(yù)測(cè)各個(gè)應(yīng)用的使用概率祭示,然后將他們編配值相應(yīng)的群組肄满,在我朝手機(jī)設(shè)備廠商應(yīng)該不會(huì)是這種。設(shè)備廠商可以自行規(guī)定非活躍應(yīng)用的群組劃分規(guī)則(我朝特色质涛,廠商白名單)稠歉。請(qǐng)開發(fā)者不要試圖篡改應(yīng)用所處的群組,而是專注于改善應(yīng)用行為蹂窖,確保應(yīng)用被劃分至目標(biāo)群組后轧抗,依舊能夠順利運(yùn)行(小公司,好好提升技術(shù)瞬测,)
5個(gè)分組如下 活躍 (Active)横媚、工作 (Working set)、 常用 (Frequent)月趟、 極少 (Rare)灯蝴、應(yīng)用偶爾被使用 (App is not frequently used)
  • 活躍 (Active): 應(yīng)用正在被使用 (每個(gè)應(yīng)用都可以)
    1、啟動(dòng)了一個(gè)Activity
    2孝宗、正在運(yùn)行的前臺(tái)服務(wù)
    3穷躁、另外一個(gè)應(yīng)用已關(guān)聯(lián)該應(yīng)用
    4、 用戶點(diǎn)擊了推送

  • 工作 (Working set): 應(yīng)用使用頻率很高
    1因妇、若應(yīng)用的運(yùn)行頻率很高问潭,但目前并未處于“活躍”狀態(tài),它就會(huì)被劃分至工作群組婚被,例如用戶常用的社交媒體應(yīng)用狡忙。此外,該群組還包括了那些被間接使用的應(yīng)用址芯。微信 QQ 支付寶 灾茁,工作分組內(nèi)的應(yīng)用任務(wù)(Job)運(yùn)行和鬧鈴受到系統(tǒng)的部分限制

  • 常用 (Frequent): 應(yīng)用經(jīng)常但不是每天被使用
    常用應(yīng)用指用戶經(jīng)常使用但不是每天使用的應(yīng)用窜觉,比如用戶在健身房使用的打卡應(yīng)用可能就屬于這一群組。跑步的APP系統(tǒng)對(duì)常用分組采用的限制更強(qiáng)北专,應(yīng)用運(yùn)行任務(wù)(job)和觸發(fā)鬧鈴的能力都會(huì)受到影響禀挫,而且接受的高優(yōu)先性FCM消息也有數(shù)量上限

  • 極少 (Rare): 應(yīng)用偶爾被使用
    若應(yīng)用的使用頻率很低,它就會(huì)被劃分至該分組拓颓,(比如說你去某個(gè)地方语婴,訂酒店之類的APP,)該群組下的應(yīng)用在任務(wù) (job)驶睦、鬧鈴和高優(yōu)先性FCM消息的資源調(diào)用上都會(huì)受到嚴(yán)格的限制腻格。此外,網(wǎng)絡(luò)訪問能力也會(huì)受到影響

  • 應(yīng)用偶爾被使用 (App is not frequently used)
    安裝后一次都未被使用過的應(yīng)用將被劃分至 “從不” 這一特殊群組啥繁,并受到十分嚴(yán)格的系統(tǒng)限制 我們自己的手機(jī)上有這種的App 很多

  • 我們做應(yīng)用層APP應(yīng)該怎么應(yīng)對(duì)這幾種分組 ?

    • 每個(gè)模式下青抛,都能打開APP旗闽,確保App不能炸掉
    • 要確保有啟動(dòng)的 Launcher Activity,如果沒有的話蜜另,有可能你的應(yīng)用不會(huì)切換到活躍分組
    • 推送的消息要具有可操作性适室,這個(gè)的意思就是說,點(diǎn)了通知欄要跳到應(yīng)用去
    • 若應(yīng)用在接受高優(yōu)先級(jí)的 FCM 消息之后未能發(fā)送推送举瑰,用戶將無法與應(yīng)用產(chǎn)生互動(dòng)并將其優(yōu)先級(jí)提升至 “活躍” 等級(jí)捣辆。
    • 如果用戶多次忽略某個(gè)App的推送,系統(tǒng)會(huì)去詢問用戶是否不再接受此推送 此迅。所以不要亂去推送汽畴,為了保持活躍群組!
  • 后臺(tái)的限制 (微信經(jīng)常這樣)當(dāng)系統(tǒng)檢測(cè)到應(yīng)用消耗過多的資源時(shí),系統(tǒng)會(huì)發(fā)通知詢問用戶是否需要限制該應(yīng)用的后臺(tái)的活動(dòng)
    1耸序、第一中期情況是忍些,頻繁使用喚醒鎖 (wake locks):屏幕關(guān)閉后,局部喚醒鎖 (Partial wake lock) 連續(xù)開啟 1 小時(shí)坎怪;
    2罢坝、過多的后臺(tái)服務(wù):當(dāng)應(yīng)用目標(biāo) API 等級(jí)低于 26,且運(yùn)行過多后臺(tái)服務(wù)搅窿。

  • Android P 進(jìn)一步提升了省電模式的性能嘁酿。需要由設(shè)備的廠商來決定采用的具體的限制
    作為開發(fā)者 我們自己,我們需要在省電模式下測(cè)試應(yīng)用男应。確保自己的應(yīng)用能夠安全的上線和運(yùn)行

        //使用 Android Debug Bridge 命令 https://mp.weixin.qq.com/s?__biz=MzAwODY4OTk2Mg==&mid=2652046811&idx=1&sn=f0340e6fabb07a3ee40db45bdd58e7b0&chksm=808ca59eb7fb2c883c6ae99be7c84460f48886cd79bb0de886a5bac84afa2d8050a58339cc89&scene=21#wechat_redirect

2闹司、后臺(tái)限制

  • Android P新增后臺(tái)限制功能,如果應(yīng)用出現(xiàn) Android Vitals 里面所描述的行為殉了,系統(tǒng)將提醒用戶限制該應(yīng)用的訪問設(shè)備的資源!
  • Android Vitals:是谷歌提高Android設(shè)備穩(wěn)定性和性能的一項(xiàng)舉措开仰。當(dāng)選擇的用戶運(yùn)行你的應(yīng)用程序時(shí),他們的Android設(shè)備記錄各種度量,包括關(guān)于應(yīng)用程序穩(wěn)定性众弓、應(yīng)用程序啟動(dòng)時(shí)間恩溅、電池使用時(shí)間、渲染時(shí)間和權(quán)限拒絕的數(shù)據(jù)谓娃。谷歌播放控制臺(tái)聚集這些數(shù)據(jù)并將其顯示在Android虛擬儀表板中脚乡。儀表板突出了崩潰率、ANR率滨达、過度喚醒和卡尾鎖:這是開發(fā)人員應(yīng)該關(guān)注的核心奶稠。所有其他的vitals,當(dāng)適用于你的APP或游戲類型時(shí)捡遍,都應(yīng)該被監(jiān)控锌订,以確保它們不會(huì)產(chǎn)生負(fù)面影響。如果產(chǎn)生了画株,應(yīng)用的商店被發(fā)現(xiàn)的可能性低辆飘,說到底的意思就是,垃圾應(yīng)用谓传,我不幫你推薦!

3蜈项、省電模式的優(yōu)化

  • Android P 優(yōu)化了現(xiàn)在的省電助手的功能,在啟動(dòng)該功能后续挟,系統(tǒng)將對(duì)所有的后臺(tái)運(yùn)行實(shí)施加以限制

4紧卒、低耗能模式, 當(dāng)用戶一段時(shí)間沒有使用設(shè)備時(shí)候诗祸,設(shè)備將進(jìn)入低耗電模式跑芳,所有的應(yīng)用都將要受到影響。Android P并沒有針對(duì)低電耗模式做出改變.

  • 低耗電模式: 低電耗模式通過在設(shè)備長時(shí)間處于閑置狀態(tài)時(shí)推遲應(yīng)用的后臺(tái) CPU 和網(wǎng)絡(luò) Activity 來減少電池消耗直颅。應(yīng)用待機(jī)模式可推遲用戶近期未與之交互的應(yīng)用的后臺(tái)網(wǎng)絡(luò) Activity. 如果用戶設(shè)備未插接電源聋亡、處于靜止?fàn)顟B(tài)一段時(shí)間且屏幕關(guān)閉,設(shè)備會(huì)進(jìn)入低電耗模式际乘。 在低電耗模式下坡倔,系統(tǒng)會(huì)嘗試通過限制應(yīng)用對(duì)網(wǎng)絡(luò)和 CPU 密集型服務(wù)的訪問來節(jié)省電量。 這還可以阻止應(yīng)用訪問網(wǎng)絡(luò)并推遲其作業(yè)脖含、同步和標(biāo)準(zhǔn)鬧鈴.一旦用戶通過移動(dòng)設(shè)備罪塔、打開屏幕或連接到充電器喚醒設(shè)備,系統(tǒng)就會(huì)立即退出低電耗模式养葵,并且所有應(yīng)用都將返回到正常 Activity征堪。
  • 有個(gè)例子。手機(jī)設(shè)備8.0上关拒,打開視頻APP下載視屏佃蚜,關(guān)閉屏幕庸娱,一會(huì)視屏App就會(huì)關(guān)閉,在以前的版本不會(huì)出現(xiàn)谐算,這就是低電耗模式!

5熟尉、Slices App Actions

  • Google 想要透過ActionSlice 這兩個(gè)功能讓使用者減少操作動(dòng)作,讓應(yīng)用程式和操作行為更緊密結(jié)合洲脂,把以前需要操作四五下才能完成的事減少到操作兩三下或是操作一下就能自動(dòng)完成斤儿。
  • App Actions是一種全新的應(yīng)用推薦的方式,它能夠?qū)?yīng)用語義意圖和使用場(chǎng)景進(jìn)行分析恐锦,并根據(jù)分析結(jié)果在適當(dāng)?shù)臅r(shí)機(jī)向用戶推薦應(yīng)用,比如說在用戶插入耳機(jī)的時(shí)候往果,推薦開啟 音樂App 等等 --->谷歌沒有公布使用的方式
  • Slice: 的概念則是 Google Assistant 的延伸,讓使用者能快速使用到 app 里的某個(gè)特定功能一铅,只要開發(fā)者導(dǎo)入 Slice 功能陕贮,使用者在使用搜尋、Google Play 商店潘飘、Google Assitant 或其他內(nèi)建功能時(shí)都會(huì)出現(xiàn) Slice 的操作建議飘蚯。在go語言中 有個(gè)叫切片slice,它的意思是:在初始定義數(shù)組時(shí)福也,我們并不知道需要多大的數(shù)組,因此我們就需要“動(dòng)態(tài)數(shù)組”攀圈。在Go里面這種數(shù)據(jù)結(jié)構(gòu)叫slice.

6暴凑、文本識(shí)別與 Smart Linkify

  • 在 Android 9 中,我們對(duì)識(shí)別文本的機(jī)器學(xué)習(xí)模型進(jìn)行了擴(kuò)展赘来,使其可以借助 TextClassifier API 識(shí)別出類似日期或航班號(hào)這樣的信息现喳。此外, Smart Linkify 允許開發(fā)者通過 Linkify API 使用文本識(shí)別模塊完成多項(xiàng)操作犬辰,比如對(duì)用戶可采取的操作提出建議嗦篱。Smart Linkify 讓系統(tǒng)在文本識(shí)別精確度與速度上都有明顯的提升。
  • TextClassifier 后續(xù)更新下Demo 研究中


    demo.gif
        TextClassifier API
       https://developer.android.google.cn/reference/android/view/textclassifier/package-summary
      Linkify API
     https://developer.android.google.cn/reference/android/text/util/Linkify

7幌缝、神經(jīng)網(wǎng)絡(luò) API 1.1

  • Android 9.0 對(duì)神經(jīng)網(wǎng)絡(luò) API 進(jìn)行了擴(kuò)展與改進(jìn)灸促,進(jìn)一步優(yōu)化 Android 對(duì)機(jī)器學(xué)習(xí)硬件加速的支持。神經(jīng)網(wǎng)絡(luò) API 1.1 共增加了對(duì) 9 個(gè)新算子的支持涵卵,它們分別是Pad浴栽、BatchToSpaceND、SpaceToBatchND轿偎、Transpose典鸡、Strided Slice、Mean坏晦、Div萝玷、Sub 和 Squeeze嫁乘。TensorFlow Lite就是一個(gè)已經(jīng)用上此 API 的典型機(jī)器學(xué)習(xí)框架。

人機(jī)交互

1球碉、全新系統(tǒng)導(dǎo)航

  • Android 9迎來了全新的系統(tǒng)導(dǎo)航蜓斧,讓多任務(wù)切換及關(guān)聯(lián)應(yīng)用探索變得更加簡單。您只需要向上滑動(dòng)屏幕就可以全屏預(yù)覽最近使用過的應(yīng)用汁尺,輕觸預(yù)覽頁后便可以切換至所選應(yīng)用法精。
全新系統(tǒng)導(dǎo)航.gif

2、 凹口屏支持

  • 想起來 蘋果大佬 還是牛逼痴突,劉海是為了屈服某種硬件的缺陷搂蜓,然后谷歌就開始支持了
  • Android 9 中加入了凹口屏支持,讓您的應(yīng)用可以充分利用最新全面屏辽装,展現(xiàn)應(yīng)用的獨(dú)特魅力帮碰。該功能可以在大部分應(yīng)用中無縫工作,系統(tǒng)會(huì)通過調(diào)整狀態(tài)欄高度將應(yīng)用內(nèi)容與屏幕缺口區(qū)域分開拾积。如果您的應(yīng)用含有沉浸式內(nèi)容殉挽,您可調(diào)用display cutout APIs 確認(rèn)缺口形狀與位置,然后請(qǐng)求圍繞缺口進(jìn)行全屏布局拓巧。另外斯碌,我們還加入了開發(fā)者選項(xiàng)來模擬任意設(shè)備上的凹口形狀,從而極大簡化了應(yīng)用支持凹口屏幕所需的構(gòu)建以及測(cè)試流程肛度。

3傻唾、 通知與智能回復(fù)

  • Android 9 進(jìn)一步改善了通知的實(shí)用性與可操作性。消息類應(yīng)用可以調(diào)用新的 MessagingStyle API 來顯示對(duì)話承耿,附加照片和表情冠骄,或者提供智能回復(fù)建議。
     // Create new Person.  完蛋了加袋,這下在安卓中Person類有了凛辣,不僅僅是一個(gè)了
        val sender = Person()
                .setName(name)
                .setUri(uri)
                .setIcon(null)
                .build()
      // Create image message.
        val message = Notification.MessagingStyle.Message("Picture", time, sender)
                .setData("image/", imageUri)
        val style = Notification.MessagingStyle(getUser())
                .addMessage("Check this out!", 0, sender)
                .addMessage(message)

4、文本放大鏡

  • Android 9 中添加文字放大鏡工具 (Magnifier widget)职烧,以提升文本選擇方面的用戶體驗(yàn)扁誓。由于該放大器提供了可以在文本上方拖拽的文本放大面板,所以有助于用戶精準(zhǔn)地定位光標(biāo)或文本選擇手柄蚀之。該功能可以靈活運(yùn)用在所有附加在窗口的視圖上跋理,個(gè)性化小部件和定制文本呈現(xiàn)均是不錯(cuò)的應(yīng)用場(chǎng)景。
  • 該放大器工具還可以提供任何視圖或界面的放大版本恬总,而不僅僅是文本前普。


    文本放大.gif

用戶安全與隱私

1、統(tǒng)一身份驗(yàn)證對(duì)話框

  • 為了保障用戶在不同甘銀強(qiáng)和應(yīng)用之間能夠獲得一致的體驗(yàn)壹堰,Android P 引入了統(tǒng)一的身份驗(yàn)證對(duì)話框拭卿,提醒用戶進(jìn)行操作骡湖。應(yīng)用可以不自行的設(shè)計(jì),該API還支持面部識(shí)別虹膜識(shí)別技術(shù) 是基于眼睛中的虹膜進(jìn)行身份識(shí)別峻厚,應(yīng)用于安防設(shè)備(如門禁等)响蕴,以及有高度保密需求的場(chǎng)所。

    • 優(yōu)點(diǎn)
      1.便于用戶使用惠桃;
      2.可能會(huì)是最可靠的生物識(shí)別技術(shù)浦夷;.
      3.不需物理的接觸;
      4.可靠性高辜王。
    • 缺點(diǎn)
      1.很難將圖像獲取設(shè)備的尺寸小型化劈狐;
      2.設(shè)備造價(jià)高,無法大范圍推廣呐馆;
      3.鏡頭可能產(chǎn)生圖像畸變而使可靠性降低肥缔;
      4.兩大模塊:硬件和軟件;
      5.一個(gè)自動(dòng)虹膜識(shí)別系統(tǒng)包含硬件和軟件兩大模塊:虹膜圖像獲取裝置和虹膜識(shí)別算法汹来。分別對(duì)應(yīng)于圖像獲取和模式匹配這兩個(gè)基本問題续膳。
  • 代碼如下

 // TODO 一定要在 API 28的模擬器上跑 要不然 app 會(huì)直接奔潰掉
        val BiometricPrompt = BiometricPrompt.Builder(this)
                .setTitle("指紋驗(yàn)證")
                .setDescription("描述")
                .setNegativeButton("取消", mainExecutor, DialogInterface.OnClickListener { dialogInterface, i -> Log.i(UserSecurityAndPrivacyActivity@ this.localClassName, "Cancel button clicked") })
                .build()
        val mCancellationSignal = CancellationSignal()
        mCancellationSignal.setOnCancelListener {
            CancellationSignal.OnCancelListener {
                fun onCancel() {
                    println("取消了啊")
                }
            }
        }
        val mAuthenticationCallback = object : BiometricPrompt.AuthenticationCallback() {
            override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
                super.onAuthenticationError(errorCode, errString)
                println("發(fā)生了 錯(cuò)誤了啊")
            }

            override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
                super.onAuthenticationSucceeded(result)
                println("發(fā)生了 成功了啊")
            }

            override fun onAuthenticationFailed() {
                super.onAuthenticationFailed()
                println("發(fā)生了 失敗了")
            }
        }
        BiometricPrompt.authenticate(mCancellationSignal, mainExecutor, mAuthenticationCallback)

2、Android Protected Confirmation

  • 安卓保護(hù)確認(rèn):運(yùn)行Android 9或更高版本的支持設(shè)備使您有能力使用Android保護(hù)的確認(rèn)收班。使用此工作流時(shí)坟岔,應(yīng)用程序向用戶顯示提示,要求用戶批準(zhǔn)簡短語句摔桦。這個(gè)聲明允許應(yīng)用程序重新確認(rèn)用戶希望完成一個(gè)敏感的交易社付,例如支付。

3酣溃、KeyStore 加強(qiáng)密鑰安全保護(hù)

  • 加入了一個(gè)新的KeyStore 類 —— StrongBox,并提供相應(yīng)的 API 來支持那些提供了防入侵硬件措施的設(shè)備纪隙,比如獨(dú)立的 CPU赊豌,內(nèi)存以及安全存儲(chǔ)。

4绵咱、 DNS over TLS 基于TLS的DNS

  • 大多的網(wǎng)絡(luò)連接 --DNS查詢--》返回IP地址--》客服端就能連接上網(wǎng)頁了碘饼。互聯(lián)網(wǎng)的大佬們一直在致力于新的NDS的協(xié)議的開發(fā)悲伶,該協(xié)議就是NDS over TLS協(xié)議 TLS:安全傳輸層協(xié)議(TLS)用于在兩個(gè)通信應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性
  • Android P 正式版內(nèi)置對(duì) DNS over TLS的支持艾恼,在 “網(wǎng)絡(luò)和互聯(lián)網(wǎng)” 設(shè)置中添加了隱私 DNS (Private DNS) 模式。
  • NS over TLS 模式自動(dòng)為所有系統(tǒng)上的應(yīng)用提供安全 DNS查詢麸锉。不過钠绍,若應(yīng)用未使用系統(tǒng) API,而是自行運(yùn)行 DNS 查詢花沉,它們必須確保在系統(tǒng)進(jìn)行安全連接情況下柳爽,不發(fā)送不安全的 DNS 查詢媳握。應(yīng)用可以調(diào)用新的 API
 LinkProperties.isPrivateDnsActive()

5、Android P默認(rèn)使用了HTTPS

6磷脯、基于編譯器的安全緩解措施

  • Android 9 將進(jìn)一步擴(kuò)展編譯器級(jí)別的安全緩解措施蛾找,借助運(yùn)行時(shí)危險(xiǎn)行為監(jiān)測(cè)進(jìn)一步加強(qiáng)平臺(tái)安全建設(shè)。Android 9通過控制流程完整性 (CFI) 技術(shù)解決了代碼重用(code-reuse)和任意代碼執(zhí)行兩大漏洞赵誓,并擴(kuò)展了CFI在媒體框架和其它關(guān)鍵安全組件內(nèi)的使用范圍打毛,如NFC 與藍(lán)牙。同時(shí)俩功,Android 9還針對(duì) Android 常見內(nèi)核的 LLVM 編譯添加了 CFI內(nèi)核支持幻枉。

7、用戶隱私

  • Android 9新加入多項(xiàng)機(jī)制绑雄,進(jìn)一步加強(qiáng)了對(duì)用戶隱私的保護(hù)展辞。系統(tǒng)禁止所有處于空閑狀態(tài)的應(yīng)用對(duì)話筒、攝像頭和所有 SensorManager傳感器的訪問万牺。當(dāng)應(yīng)用的 UID 空閑時(shí)罗珍,麥克風(fēng)將會(huì)報(bào)告 “無音頻信號(hào)”,傳感器將會(huì)停止報(bào)告事件脚粟,應(yīng)用使用的攝像頭也會(huì)斷開連接覆旱,并在應(yīng)用試圖訪問時(shí)生成錯(cuò)誤。在大多數(shù)情況下核无,這些限制不會(huì)對(duì)現(xiàn)有應(yīng)用造成新的問題扣唱,谷歌建議從應(yīng)用中移除此類傳感器請(qǐng)求。
  • Android 9 還讓用戶控制是否允許訪問平臺(tái)build.serial識(shí)別碼 (它被 READ_PHONE_STATE 權(quán)限保護(hù)) ,設(shè)備的唯一標(biāo)識(shí)the hardware serial number.
    //獲取硬件序列號(hào)团南,如果可用的話噪沙。
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            //注意需要在 高版本的 SDK的手機(jī)上運(yùn)行
            val serial = Build.getSerial()
        }

攝像和影音的全面升級(jí)

1、多攝像頭的API的改進(jìn) -->

  • 從 Android 9 開始吐根,您可以在支持多攝像頭 API 的設(shè)備上通過兩個(gè)或更多實(shí)體攝像頭同時(shí)訪問視頻流正歼;在配有雙前置或雙后置攝像頭的設(shè)備上,實(shí)現(xiàn)單攝像頭無法實(shí)現(xiàn)的創(chuàng)新功能:如無縫變焦拷橘、散景和立體視覺局义。該 API 還允許您調(diào)用可以在兩臺(tái)或更多臺(tái)攝像頭之間自動(dòng)切換的邏輯或混合攝像頭視頻流。

2冗疮、使用動(dòng)態(tài)處理增強(qiáng)音頻-->降噪技術(shù)

  • iPhone手機(jī)的降噪技術(shù):雙麥克風(fēng)降噪技術(shù)萄唇,即手機(jī)中內(nèi)置的兩個(gè)麥克風(fēng),一個(gè)保持清晰通話术幔,另一個(gè)麥克風(fēng)從物理上主動(dòng)消除噪音另萤,通過收集外界的噪聲,運(yùn)用內(nèi)部算法進(jìn)行處理后诅挑,發(fā)出與噪音相反的聲波仲墨,利用抵消原理消除噪音勾缭。其他手機(jī)估計(jì)也差不多!
  • 開發(fā)者可以調(diào)用 Dynamics Processing API對(duì)音頻進(jìn)行動(dòng)態(tài)處理目养,通過分離出特定頻率的聲音俩由,降低過大的音量,或者增強(qiáng)過小的音量癌蚁,來改善應(yīng)用的音頻質(zhì)量幻梯。比如說,即便說話者聲音小努释,離麥克風(fēng)遠(yuǎn)碘梢,而且外界環(huán)境十分嘈雜,您的應(yīng)用依然可以有效捕捉并他/她的聲音伐蒂,并進(jìn)行相應(yīng)優(yōu)化煞躬。該 API 提供了多聲場(chǎng)、多頻段的動(dòng)態(tài)處理效果逸邦,包括一個(gè)預(yù)均衡器恩沛、一個(gè)多頻段壓縮器,一個(gè)后均衡器以及一個(gè)串聯(lián)的音量限制器缕减。

3雷客、ImageDecoder API

  • ImageDecoder 通過一種更為簡單的方式將圖像解碼為位圖或 drawableImageDecoder 允許您從字節(jié)緩沖區(qū)桥狡、文件或 URI 創(chuàng)建位圖或 drawable搅裙。它相比BitmapFactory有以下幾個(gè)優(yōu)勢(shì):支持精確縮放,支持單步解碼至硬件存儲(chǔ)器裹芝,支持解碼后處理部逮,以及動(dòng)畫圖像解碼。

  • ImageDecoder:一個(gè)的可以將PNG, JPEG, WEBP, GIF, or HEIF格式的圖片的轉(zhuǎn)換成Drawable 或者Bitmap對(duì)象的類嫂易。

    • 1兄朋、正常的使用:得到drawable
    val file =File("filename")
         val source = ImageDecoder.createSource(file)
         val drawable = ImageDecoder.decodeDrawable(source)
    
    • 2、傳遞OnHeaderDecodedListener炬搭,這里ImageInfo存放的是原始的圖片的寬和高蜈漓∧鹿穑可以修改用來修改圖片寬高的時(shí)候修改SampleSize
    val listener = object : ImageDecoder.OnHeaderDecodedListener {
             override fun onHeaderDecoded(decoder: ImageDecoder, info: ImageDecoder.ImageInfo, source: ImageDecoder.Source) {
                 decoder.setTargetSampleSize(2)
             }
         }
         val drawable1 = ImageDecoder.decodeDrawable(source, listener)
    
    • 3宫盔、如果解碼的圖片是gif,會(huì)被解碼成AnimatedImageDrawable
     val drawable2 = ImageDecoder.decodeDrawable(source)
         if (drawable is AnimatedImageDrawable) {
             drawable.start()
         }
    
    • 4享完、解碼出來的bitmap是不可變灼芭,可以使用PostProcessor來添加一些自定義的效果
     val drawable3 = ImageDecoder.decodeDrawable(source) { decoder, info, src ->
             decoder.setPostProcessor { canvas ->
                 // This will create rounded corners.
                 //創(chuàng)建圓角照片
                 val path = Path()
                 path.setFillType(Path.FillType.INVERSE_EVEN_ODD)
                 val width = canvas.width
                 val height = canvas.height
                  // 最低的API的要求是 21 所以我的工程里面的 API為 21
                 path.addRoundRect(0.toFloat(), 0.toFloat(), width.toFloat(), height.toFloat(), 20.toFloat(), 20.toFloat(), Path.Direction.CW)
                 val paint = Paint()
                 paint.setAntiAlias(true)
                 paint.setColor(Color.TRANSPARENT)
                 paint.setXfermode(PorterDuffXfermode(PorterDuff.Mode.SRC))
                 canvas.drawPath(path, paint)
                 PixelFormat.TRANSLUCENT
             }
         }
    
    • 5、如果解碼的照片是不完整的或者包含錯(cuò)誤般又,解碼的時(shí)候會(huì)拋出DecodeException彼绷,一些情況下巍佑,可能已經(jīng)解碼出一部分的照片,這個(gè)時(shí)候傳遞OnPartialImageListener寄悯,并返回true萤衰,就只顯示解碼出來的部分,剩余部分使用空白代替!
    val drawable5 = ImageDecoder.decodeDrawable(source) { decoder, info, src ->
             decoder.setOnPartialImageListener { e: ImageDecoder.DecodeException ->
                  true
             }
         }
    

網(wǎng)絡(luò)連接與位置

1猜旬、使用 Wi-Fi RTT 脆栋,進(jìn)行室內(nèi)定位

  • Android 9IEEE 802.11mc Wi-Fi協(xié)議添加了平臺(tái)支持 (也稱為 Wi-Fi 往返時(shí)間,RTT)洒擦,這可以讓您在應(yīng)用中使用室內(nèi)定位功能椿争。在提供硬件支持的 Android 9 設(shè)備上,在啟動(dòng)位置服務(wù)并勾選 “允許獲取地理位置信息” 選項(xiàng)后熟嫩,應(yīng)用就可以使用 RTT API 測(cè)量與附近 Wi-Fi 接入點(diǎn) (AP) 的距離秦踪。設(shè)備不需要連接到 AP 便可以使用 RTT,而且為了保護(hù)隱私掸茅,只有手機(jī)能夠確定距離椅邓,而 AP 不可以。
  • 通過測(cè)量從設(shè)備到三個(gè)或更多 AP 的距離倦蚪,您可以計(jì)算設(shè)備位置至 1 到 2 米的精度希坚。這種精確度允許您創(chuàng)建更多新的體驗(yàn):室內(nèi)導(dǎo)航、基于位置的細(xì)粒度服務(wù)陵且,例如裁僧,模糊語音控制 ( "打開這里的燈" ) ;以及基于位置的資訊服務(wù) ( "這個(gè)產(chǎn)品有優(yōu)惠活動(dòng)嗎慕购?" )聊疲。

2、JobScheduler 中的數(shù)據(jù)費(fèi)用敏感度

  • Android 9中沪悲,JobScheduler 可以更好地幫助用戶處理與網(wǎng)絡(luò)相關(guān)的任務(wù)获洲,并與運(yùn)營商單獨(dú)提供的網(wǎng)絡(luò)狀態(tài)信號(hào)相協(xié)調(diào)
  • JobSchedulerAndroid 的一項(xiàng)核心服務(wù),它可以幫助您針對(duì)低耗電模式殿如、應(yīng)用待機(jī)模式以及后臺(tái)限制贡珊,妥善進(jìn)行各種任務(wù)的調(diào)度。在 Android 9中涉馁,JobScheduler 可以更好地幫助用戶處理與網(wǎng)絡(luò)相關(guān)的任務(wù)门岔,并與運(yùn)營商單獨(dú)提供的網(wǎng)絡(luò)狀態(tài)信號(hào)相協(xié)調(diào)。任務(wù)現(xiàn)在可以聲明預(yù)估數(shù)據(jù)量烤送、信號(hào)預(yù)取以及指定詳細(xì)的網(wǎng)絡(luò)要求 —— 運(yùn)營商可以報(bào)告網(wǎng)絡(luò)狀況是擁塞還是不計(jì)量寒随,然后 JobScheduler會(huì)根據(jù)網(wǎng)絡(luò)狀態(tài)管理作業(yè)。例如,當(dāng)網(wǎng)絡(luò)擁塞時(shí)妻往,JobScheduler 可能推遲大型網(wǎng)絡(luò)請(qǐng)求互艾;而在網(wǎng)絡(luò)可以不計(jì)量使用時(shí),則可以運(yùn)行多種預(yù)加載作業(yè) (例如讯泣,預(yù)讀標(biāo)題) 來改進(jìn)用戶體驗(yàn)纫普。

3、 用于 NFC 支付和安全交易的 Open Mobile API

  • Android 9GlobalPlatform Open Mobile API 的實(shí)現(xiàn)添加至平臺(tái)中好渠。在支持的設(shè)備上局嘁,應(yīng)用可以使用 OMAPI API 訪問安全元素 (SE) ,以啟用智能卡支付等安全服務(wù)晦墙。硬件抽象層 (HAL) 提供了必要的 API悦昵,用于枚舉多種可用的 Secure Elements (如 eSE, UICC 等)。

更強(qiáng)勁的性能表現(xiàn)

1晌畅、ART 性能提升

  • ART是什么但指?
  • AOT是”Ahead Of Time”的縮寫,指的就是ART(Anroid RunTime)這種運(yùn)行方式抗楔。
  • JIT是運(yùn)行時(shí)編譯棋凳,這樣可以對(duì)執(zhí)行次數(shù)頻繁的dex代碼進(jìn)行編譯和優(yōu)化,減少以后使用時(shí)的翻譯時(shí)間连躏,雖然可以加快Dalvik運(yùn)行速度剩岳,但是還是有弊病,那就是將dex翻譯為本地機(jī)器碼也要占用時(shí)間入热,所以Google在4.4之后推出了ART拍棕,用來替換Dalvik。
  • ART的策略與Dalvik不同勺良,在ART 環(huán)境中绰播,應(yīng)用在第一次安裝的時(shí)候,字節(jié)碼就會(huì)預(yù)先編譯成機(jī)器碼尚困,使其成為真正的本地應(yīng)用蠢箩。之后打開App的時(shí)候,不需要額外的翻譯工作事甜,直接使用本地機(jī)器碼運(yùn)行谬泌,因此運(yùn)行速度提高。
  • 當(dāng)然ART與Dalvik相比逻谦,還是有缺點(diǎn)的掌实。
    • ART需要應(yīng)用程序在安裝時(shí),就把程序代碼轉(zhuǎn)換成機(jī)器語言跨跨,所以這會(huì)消耗掉更多的存儲(chǔ)空間潮峦,但消耗掉空間的增幅通常不會(huì)超過應(yīng)用代碼包大小的20%
    • 由于有了一個(gè)轉(zhuǎn)碼的過程,所以應(yīng)用安裝時(shí)間難免會(huì)延長
    • 但是這些與更流暢的Android體驗(yàn)相比而言勇婴,不值一提忱嘹。
  • Android 9 借助 ART 運(yùn)行時(shí)顯著提高了應(yīng)用的性能表現(xiàn)與運(yùn)行效率。擴(kuò)展了 ART對(duì)執(zhí)行特征的使用耕渴,以優(yōu)化應(yīng)用并減少已編譯應(yīng)用代碼的內(nèi)存占用量拘悦。ART 現(xiàn)可使用特征文件信息在設(shè)備上重寫 DEX 文件,幫助多個(gè)常見應(yīng)用的內(nèi)存占用減少高達(dá) 11%橱脸。我們期望借此減少系統(tǒng) DEX 內(nèi)存使用量并加快應(yīng)用啟動(dòng)時(shí)間础米。

2、Kotlin 優(yōu)化

  • Kotlin 是 Android 開發(fā)的一等編程語言添诉,改進(jìn)了一些編譯器優(yōu)化屁桑,尤其是那些針對(duì)循環(huán)的編譯器優(yōu)化,以實(shí)現(xiàn)更好的性能栏赴。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蘑斧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子须眷,更是在濱河造成了極大的恐慌竖瘾,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件花颗,死亡現(xiàn)場(chǎng)離奇詭異捕传,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)扩劝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門庸论,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棒呛,你說我怎么就攤上這事葡公。” “怎么了条霜?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵催什,是天一觀的道長。 經(jīng)常有香客問我宰睡,道長蒲凶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任拆内,我火速辦了婚禮旋圆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘麸恍。我一直安慰自己灵巧,他們只是感情好搀矫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刻肄,像睡著了一般瓤球。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上敏弃,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天卦羡,我揣著相機(jī)與錄音,去河邊找鬼麦到。 笑死绿饵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的瓶颠。 我是一名探鬼主播拟赊,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼粹淋!你這毒婦竟也來了要门?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤廓啊,失蹤者是張志新(化名)和其女友劉穎欢搜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谴轮,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炒瘟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年吓揪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把还。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡缩宜,死狀恐怖粘都,靈堂內(nèi)的尸體忽然破棺而出廓推,到底是詐尸還是另有隱情,我是刑警寧澤翩隧,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布樊展,位于F島的核電站,受9級(jí)特大地震影響堆生,放射性物質(zhì)發(fā)生泄漏专缠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一淑仆、第九天 我趴在偏房一處隱蔽的房頂上張望涝婉。 院中可真熱鬧,春花似錦蔗怠、人聲如沸墩弯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渔工。三九已至锌钮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涨缚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工策治, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留脓魏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓通惫,卻偏偏與公主長得像茂翔,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子履腋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,077評(píng)論 25 707
  • 1珊燎、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評(píng)論 3 119
  • 失眠的時(shí)候做些什么呢?應(yīng)該是努力的讓自己睡著吧遵湖!但會(huì)有什么用呢悔政?還是索性起來吧。就這樣閉上眼睛慢慢走進(jìn)客廳...
    米與米_閱讀 210評(píng)論 0 0
  • 5.14日凌晨2點(diǎn)賽罕區(qū)城管渣土大隊(duì)執(zhí)法人員巡查至濱河南路時(shí)發(fā)現(xiàn)限高架下有大量煤灰遺撒污染路面,針對(duì)遺撒現(xiàn)象迁沫,5....
    8058ed577432閱讀 294評(píng)論 0 0
  • 上次寫了磨豆腐芦瘾,這次寫圍魚。 小時(shí)候在江南長大集畅,村莊四周被荷塘圍住近弟,除了一條大道通到公路。荷塘里挺智,夏天有荷花祷愉,菱角...
    番茄洋蔥丸子閱讀 204評(píng)論 0 1