前言
“
有人覺得自己不找工作,不需要看面試題,真的是這樣嗎?試想?如果你一直待在一家公司,都不知道外面的情況如何的話,那是很可怕的,至少我這麼認為。看面試題的目的不一定要跳槽,而是知道自己的優缺點是什麼,知道市場需要什麼樣的人,隻有這樣才能和社會接上軌迹!
”
1、Android點選應用圖示如何啟動APP?
1.點選應用圖示後會去啟動應用的<code>LauncherActivity。</code> <code>2.</code>如果<code>LauncherActivity</code>所在程序沒有建立,就會建立新程序(以Socket形式通知<code>Zygote程序</code>去fork新程序)。 3.整體的流程就是<code>Activity</code>的啟動流程。
1.standard 預設模式,可以不用寫配置。在這個模式下,都會預設建立一個新的執行個體。是以,在這種模式下,可以有多個相同的執行個體,也允許多個相同Activity疊加。 2.singleTop 可以有多個執行個體,但是不允許多個相同Activity疊加。即,如果Activity在棧頂的時候,啟動相同的Activity,不會建立新的執行個體,而會調用其onNewIntent方法。 3.singleTask 隻有一個執行個體。在同一個應用程式中啟動他的時候,若Activity不存在,則會在目前task建立一個新的執行個體,若存在,則會把task中在其之上的其它Activity destory掉并調用它的onNewIntent方法。 4.singleInstance 隻有一個執行個體,并且這個執行個體獨立運作在一個task中,這個task隻有這個執行個體,不允許有别的Activity存在。
3、Android橫豎屏切換activity生命周期?
橫豎屏切換根據Android系統版本會有差異,具體細節請參考:Activity橫豎屏切換生命周期詳解
1.AndroidManifest.xml不設定Activity的android:configChanges時,切屏會重新調用各個生命周期, 切橫屏時會執行一次,切豎屏時會執行兩次。生命周期如下: onSaveInstanceState-onPause-onStop-onDestory-onCreate-onStart-onRestoreInstanceState-onResume 2.設定Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時隻會執行一次。生命周期如下:onSaveInstanceState-onPause-onStop-onDestory-onCreate-onStart-onRestoreInstanceState-onResume 3.設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,隻會執行onConfigurationChanged方法。
4、PathClassLoader和DexClassLoader的差別?
<code>1.PathClassLoader</code>: 隻能加載安裝到Android系統的APK,即<code>/data/data</code>目錄,是Android預設的類加載器。 <code>2.DexClassLoader</code>: 可以加載任意目錄下的<code>dex、jar、apk、zip</code>檔案。
程序内:EventBus、檔案緩存 程序間:通過ContentProvider進行程序間資料共享和傳遞。 總結:不要通過 Intent 在 Android 基礎元件之間傳遞大資料(binder transaction 緩存為1MB)
6、Android有哪些Context的相關類?
<code>1.Context抽象類</code> <code>2.ContextImpl</code>:Context的實作類 <code>3.ContextWrapper</code>:Context的包裝類(内部是<code>ContextImpl</code>),<code>Applicaiton、Activity、Service</code>都間接或者直接繼承自<code>ContextWrapper</code>
7、IntentService和Service有什麼差別?
1.Service不是獨立的程序,也不是獨立的線程,它是依賴于應用程式的主線程(比喻成沒有界面的activity),也就是說,在更多時候不建議在Service中編寫耗時的邏輯和操作,否則會引起ANR。 2.IntentService是Service的子類,IntentService在執行onCreate操作的時候,内部開了一個線程,去你執行你的耗時操作。通過Handler looper message的方式實作了一個多線程的操作,同時耗時操作也可以被這個線程管理和執行,同時不會産生ANR的情況。
8、Service啟動方式和對應的生命周期以及差別?
1.startService(onCreate-onStartCommand-onDestory) 服務與啟動者沒有必然聯系,啟動者銷毀,服務也可以存在;除非主動調用StopService方法來停止服務。 2.bindService(onCreate-onBind-onUnbind-onDestory) 服務與啟動者互相關聯,啟動者銷毀,那麼服務也會跟着銷毀;比如activityA中bind服務,然後activityB中也在使用該服務,一旦activityA銷毀那麼服務也會銷毀,這個時候activityB中服務也就沒用了,除非再bind一次。 3.startService之後再bindService這樣避免宿主死亡之後service跟着被銷毀。
9、BroadcastReceiver有哪幾種類型?
無序廣播:無序廣播類似于電視台播放新聞聯播,不管你當時有沒有準時收看,都會按時播放新聞聯播。 發送方式:通過sendBroadcast(intent)發送 特點:①無法終止廣播 ②無法修改資料 有序廣播:有序廣播就類似于中央發送的紅頭檔案,比如說會首先發送到哪個省,然後發送到哪個市等等,按照優先級一級一級的進行接收,就比如中央給每個村民發送1千斤大米。 發送方式:通過sendOrderedBroadcast()發送 特點:①可以終止廣播 ②可以修改資料 發送方式:通過<code>SendStickyBroadcast()</code>發送。
10、Android有哪些程序?
1.前台程序: 使用者目前操作所必須的程序 2.可見程序:沒有任何前台元件,但是任輝影響螢幕上可見内容的程序。 3.服務程序:正在運作服務(該服務通過startService()啟動),且不屬于上面兩者的程序。 4.背景程序:包含目前對使用者不可兼得Activity的程序。 5.空程序:不包含任何活動元件的程序。
11、Android程序和線程的差別
1.程序是資源管理的最小機關,線程是程式執行的最小機關。 2.每個程序都有自己的資料段、代碼段和堆棧段。線程通常叫做輕型的程序。它包含獨立的棧和cpu寄存狀态,每個線程共享其所附屬程序的所有資源,包含打開的檔案,記憶體頁面,信号辨別以及配置設定記憶體等。 3.線程比程序花費更小的CPU資源。 4.在作業系統設計上,從程序演化出線程,最主要的目的就是更好的支援多處理器,并且減少程序上下文切換的開銷。 5.線程和程序的關系是:①線程屬于程序②線程運作在程序空間内③同一程序所産生的線程共享同一記憶體空間,當程序退出所産生的的線程會被強制退出并清除④一個程序至少需要一個線程來作為它的指令執行體⑤程序管理着資源(比如CPU,記憶體,檔案等),将線程配置設定到某個CPU運作。 6.線程按照其排程這可分為使用者級線程和核心級線程兩種。 7.使用者級線程要綁定核心級線程使用。 8.預設情況下不能保證新線程和調用線程的執行順序。 9.每個程序内部的不同線程都有自己的唯一辨別(ID),線程辨別隻在它所屬的程序環境中有效。 10.Sleep線程告訴系統,自己在一段時間内不被排程。
12、Android線程間通信有哪些方式?
1.接口 2.Handler機制 3.觀察者模式(EventBus) 4.Android使用RunonUiThread可以切換到主線程 5.AsyncTask機制 6.BroadCast
13、Android程序間通信有哪些方式?
1.Bundle,可以在一個程序中通過Intent将攜帶資料的Bundle發送到另一個程序的元件。 2.ContentProvider,多個App共享資料 3.AIDL(Android Interface Define Language)服務,用戶端定義接口暴露給服務端使用 4.BroadCast 5.Socket
14、如何進行程序保活
1.提升程序優先級,降低程序被殺死的機率。 2.拉活已經被殺死的程序。
<code> ● 利用廣播拉活Activity</code> ● 手機去監聽<code>系統廣播</code>:如開機廣播,鎖屏解鎖廣播等。
15、什麼 是序列号和反序列化?
1.序列化:将資料結構或對象轉換成二進制的過程 2.反序列化:将在序列化過程中生成的二進制串轉換成資料結構或對象的過程
16、Serializable和Parcelable的差別
1.Serilizable是java實作的一套序列化方法,會觸發頻繁的IO操作,效率較低,适合将對象存儲到磁盤上的情況。 2.Parcelable是Android提供的序列化方法。Parcelable将序列化後的位元組流寫入到一個共享記憶體中,其他對象可以從該共享記憶體中讀出位元組流,并反序列化成對象,效率較高,适合對象間和程序間傳遞資訊。
17、64k問題的産生原因和如何解決?
1.産生原因:<code>Dex檔案</code>中class、method的索引使用<code>short類型</code>,是以如果方法、類的總數超過了<code>2位元組的short-65535</code>就會出問題。 2.解決辦法:使用<code>Google的Multidex</code>
18、Android 中的動畫有哪些?
1.幀動畫 指通過指定的每一幀的圖檔和播放時間,有序的進行播放的動畫效果。 2.補間動畫 指通過指定View的初始狀态、變化時間、移動距離等方式實作的動畫效果。 屬性有scale、alpha、Translate、Rotate 注意:隻是在視圖層實作了動畫效果,并沒有真正改變View的屬性。 3.屬性動畫 屬性動畫,通過不斷地改變View的屬性,不斷重繪而形成動畫效果。 相比較視圖動畫,View的屬性是真正改變。
附:Android基礎思維導圖
