Android面試問題

  • 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手機)的一套指令集
  • 常用指令集
  • 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)。

-Http常用頭

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容