android-23,Android23種設(shè)計模式

Android Service啟動Activity

Android Service 基礎(chǔ)知識點

鹽田網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

我們都知道Activity中啟動Activity,只需要startActivity,如果在Service中啟動Activity呢?

在Service中啟動Activity,很多人說在非Activity中啟動Activity需要加FLAG_ACTIVITY_NEW_TASK flag,如果我不加會怎么樣呢?

并沒有出現(xiàn)異常和崩潰,跳轉(zhuǎn)也是正常的,但是與之前所說的會崩潰報出異常不符合???!難道是與版本有關(guān)嗎?于是我使用了Android 23去測試果然拋出了異常

ContextImpl在Android studio中屬于隱藏源碼,在IDE中可能看不到,那就需要在SDK中去找 我的是:D:\AndroidSdk\sources\android-23\android\app\ContextImpl.java

可以看到只是判斷條件不同而已,android-23中發(fā)現(xiàn)沒有Intent.FLAG_ACTIVITY_NEW_TASK會直接拋出異常,而android-26中我們在非 Activity 調(diào)用 startActivity() 的時候,我們這個 options 通常是 null 的,所以在 26 之間的時候,誤把判斷條件 options == null 寫成了 options != null 導(dǎo)致進不去 if,從而不會拋出異常

附加:在android 24-android 27(即android N-android O)之間出現(xiàn)了bug,也就是說即使沒有加Intent.FLAG_ACTIVITY_NEW_TASK也會正常跳轉(zhuǎn)

可以很明顯看到判斷條件targetSdkVersion Build.VERSION_CODES.N || targetSdkVersion = Build.VERSION_CODES.P 即在24-27

看Activity中啟動Activity的源碼

Activity.startActivity() -startActivityForResult()-mInstrumentation.execStartActivity() ...最終還是Ams去啟動Activity 也就是Activity中重寫了startActivity()方法所以不會出現(xiàn)這個異常

其實直觀很好理解,如果不是在Activity中啟動的,那就可以看做不是用戶主動的行為,也就說這個界面可能出現(xiàn)在任何APP之上,如果不用Intent.FLAG_ACTIVITY_NEW_TASK將其限制在自己的Task中,那用戶可能會認為該Activity是當前可見APP的頁面,這是不合理的。舉個例子:我們在聽音樂,這個時候如果郵件Service突然要打開一個Activity,如果不用Intent.FLAG_ACTIVITY_NEW_TASK做限制,那用戶可能認為這個Activity是屬于音樂APP的,因為用戶點擊返回的時候,可能會回到音樂,而不是郵件(如果郵件之前就有界面)

對比源碼發(fā)現(xiàn),在我們非 Activity 調(diào)用 startActivity() 的時候,我們這個 options 通常是 null 的,所以在 24~27 之間的時候,誤把判斷條件 options == null 寫成了 options != null 導(dǎo)致進不去 if,從而不會拋出異常,如此我們使用 Context.startActivity() 的時候是一定要加上 FLAG_ACTIVITY_NEW_TASK 的,但是在 Android N 到 O-MR1,即 24~27 之間卻出現(xiàn)了 bug,即使沒有加也會正確跳轉(zhuǎn)

結(jié)語:感謝各位大佬的分享,對此有疑問的可以去運行跑一下,看一下相關(guān)的源碼,如有錯誤的需要改進的地方,請留言評論指出,謝謝!

參考文章:

為什么微信明明是在自己的手機登錄卻顯示在android-23登錄?

應(yīng)該是你禁止微信讀取更多設(shè)備信息了或者是你刷的ROM沒有硬件信息,Android-23就是SDK版本為23的Android,也就是6.0

我的是oppo手機登陸微信為什么顯示登錄的設(shè)備是Android設(shè)備名稱是android-23

那是微信登陸你手機時的系統(tǒng)識別,以防止微信賬號不是在你本手機上登陸時提示的安全風(fēng)險,比如防止賬號被盜等!

android23 是什么手機

1.23是android api的級別,api 級別是一個對 Android 平臺版本提供的框架 API 修訂版進行唯一標識的整數(shù)值,23對應(yīng)的android平臺是android6.0,現(xiàn)在市場上的手機已經(jīng)到android8.0了

本文題目:android-23,Android23種設(shè)計模式
文章出自:http://muchs.cn/article38/pheppp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、企業(yè)建站軟件開發(fā)、網(wǎng)站改版、靜態(tài)網(wǎng)站、做網(wǎng)站

廣告

聲明:本網(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)

成都定制網(wǎng)站建設(shè)