- Service 與 IntentService 的區(qū)別
IntentService是Service 的子類,默認給我們開啟了一個工作線程執(zhí)行耗時任務,并且執(zhí)行完任務后自 動停止服務。擴展IntentService比較簡單,提供一個構(gòu)造方法和實現(xiàn)onHandleIntent 方法就可了,不用重寫父類的其他方法。但是如果要綁定服務的話,還是要重寫onBind 返回一個IBinder 的。使用Service 可以同時執(zhí)行多個請求,而使用IntentService 只能同時執(zhí)行一個請求。
- Android 應用中如何保存數(shù)據(jù)
android 五種數(shù)據(jù)存儲 :SharePreferences、SQLite、Contert Provider、File、網(wǎng)絡存儲
- 兩個 Fragment 之間如何通信
- 拿到Fragment實例然后調(diào)用它的函數(shù)
- 自定義接口回調(diào)
- EventBus
- 兩個不同的 app 之間如何交互
- 使用ContentProvider
- 使用文件或云端方式共享
- BroadcastReceiver
- 使用AIDL
- 為什么 Bundle 被用來傳遞數(shù)據(jù),為什么不能使用簡單的 Map 數(shù)據(jù)結(jié)構(gòu)
- Bundle內(nèi)部是由ArrayMap實現(xiàn)的,ArrayMap的內(nèi)部實現(xiàn)是兩個數(shù)組,一個int數(shù)組是存儲對象數(shù)據(jù)對應下標,一個對象數(shù)組保存key和value,內(nèi)部使用二分法對key進行排序,所以在添加、刪除、查找數(shù)據(jù)的時候,都會使用二分法查找,只適合于小數(shù)據(jù)量操作,如果在數(shù)據(jù)量比較大的情況下,那么它的性能將退化。而HashMap內(nèi)部則是數(shù)組+鏈表結(jié)構(gòu),所以在數(shù)據(jù)量較少的時候,HashMap的Entry Array比ArrayMap占用更多的內(nèi)存。因為使用Bundle的場景大多數(shù)為小數(shù)據(jù)量,我沒見過在兩個Activity之間傳遞10個以上數(shù)據(jù)的場景,所以相比之下,在這種情況下使用ArrayMap保存數(shù)據(jù),在操作速度和內(nèi)存占用上都具有優(yōu)勢,因此使用Bundle來傳遞數(shù)據(jù),可以保證更快的速度和更少的內(nèi)存占用。
- 另外一個原因,則是在Android中如果使用Intent來攜帶數(shù)據(jù)的話,需要數(shù)據(jù)是基本類型或者是可序列化類型,HashMap使用Serializable進行序列化,而Bundle則是使用Parcelable進行序列化。而在Android平臺中,更推薦使用Parcelable實現(xiàn)序列化,雖然寫法復雜,但是開銷更小,所以為了更加快速的進行數(shù)據(jù)的序列化和反序列化,系統(tǒng)封裝了Bundle類,方便我們進行數(shù)據(jù)的傳輸。
- 解釋下 Android 的 View
view是所有控件的父類,他的位置主要由他的四個頂點來決定。分別對應view的四個基本屬性:left,top,right,bottom。其中top是左上角縱坐標,left是左上角的橫坐標,right右下角的橫坐標,bottom右下角的縱坐標。這些坐標都是相對于view的父控件來說的,因此它是一種相對坐標。在Android系統(tǒng)中,x軸和y軸的方向分別是向右和向下的
- 什么是 ViewGroup ,它與 View 的區(qū)別在哪里
View是所有UI組件的基類,而 ViewGroup是容納這些組件的容器,其本身也是從View派生出來的.簡單的說就是:view指某些具體的控件,如Textview,imageview等,ViewGroup是用來盛放這些控件的容器,如LinearLayout和Relativelayout等
- 解釋一下 Android 中的 Intent
Intent這個單詞的意思就是"意圖,目的,意向",Intent是一種運行時綁定(runtime binding)機制,它能在程序運行的過程中連接兩個不同的組件。通過Intent,程序可以向Android表達某種請求或者意愿,Android會根據(jù)意愿的內(nèi)容選擇適當?shù)慕M件來響應。Intent是由以下組件組成:
- component(組件):目的組件
- action(動作):用來表現(xiàn)意圖的行動
- category(類別):用來表現(xiàn)動作的類別,或范疇
- data(數(shù)據(jù)):表示與動作要操縱的數(shù)據(jù)
- type(數(shù)據(jù)類型):對于data范例的描寫
- extras(擴展信息):擴展信息
- Flags(標志位):期望這個意圖的運行模式
- ADB是我們用來操作(調(diào)試)android設備(比如android手機)的一套指令集
- 常用指令集
Android 的權限有多少個不同的保護等級
- normal:低風險權限,只要申請了就可以使用(在AndroidManifest.xml中添加<uses-permission>標簽),安裝時不需要用戶確認;
- dangerous:高風險權限,安裝時需要用戶的確認才可使用;
- signature:只有當申請權限的應用程序的數(shù)字簽名與聲明此權限的應用程序的數(shù)字簽名相同時(如果是申請系統(tǒng)權限,則需要與系統(tǒng)簽名相同),才能將權限授給它;
- signatureOrSystem:簽名相同,或者申請權限的應用為系統(tǒng)應用(在system image中)。
上述四類權限級別同樣可用于自定義權限中。如果開發(fā)者需要對自己的應用程序(或部分應用)進行訪問控制,則可以通過在AndroidManifest.xml中添加<permission>標簽,將其屬性中的protectionLevel設置為上述四類級別中的某一種來實現(xiàn)。