當前位置: 華文問答 > 數碼

如何看待 Android 面試卻是 Java 面試官?

2018-10-19數碼



Android大廠面試題

什麽是Android四大元件?請簡述各自的作用並舉例說明套用場景。

Android四大元件包括:

  • Activity:代表一個具有使用者介面的可互動應用程式元件,負責展示檢視和處理使用者操作。例如,主界面、設定頁面等都是由Activity實作。
  • Service:一種在背景執行且無使用者介面的服務元件,可以執行長時間執行的操作或為其他元件提供後台功能支持。例如,音樂播放服務、數據同步服務等。
  • BroadcastReceiver:用於接收來自系統或其他套用發出的全域廣播事件,並作出響應。例如,當器材網絡狀態改變時,套用透過註冊BroadcastReceiver監聽相關Intent,從而做出相應調整。
  • ContentProvider:提供統一的數據存取介面,使得不同套用間能共享數據。例如,聯系人套用透過ContentProvider對外提供聯系人數據,其他套用透過URI即可查詢或修改這些數據。
  • 請解釋一下AndroidManifest.xml檔的作用,並列舉幾個重要的內容。

    AndroidManifest.xml是每個Android套用的配置檔,主要作用包括:

  • 聲明套用的基本資訊:如包名、版本號、套用名稱等。
  • 定義四大元件:聲明元件類名、生命周期、對外許可權等。 - 聲明所需許可權:如網絡存取、讀寫儲存、獲取位置資訊等許可權。
  • 定義套用的硬件和軟件需求:如最低支持的Android版本、支持的螢幕尺寸和方向、使用的硬件特性等。
  • 解釋一下Android中的主執行緒(UI執行緒)與子執行緒,並舉例說明如何安全地在子執行緒更新UI。

  • 主執行緒(UI執行緒):負責處理與使用者互動、繪制UI界面等操作。Android系統規定所有與UI相關的操作必須在主執行緒中完成。
  • 子執行緒:除主執行緒外,用於執行耗時操作(如網絡請求、大量計算等)的執行緒,避免阻塞UI執行緒,保證套用流暢性。
  • 安全更新UI的方式: 使用Handler 、Looper 機制,或者AsyncTask 、LiveData 、ViewModel 結合post() 、postDelayed() 、setValue() 等方法,將UI更新邏輯切換回主執行緒執行。 例如:
  • new Handler ( Looper . getMainLooper ()). post ( new Runnable () { @Override public void run () { // 更新UI程式碼 } });

    請解釋什麽是ANR(Application Not Responding),並列舉幾種可能導致ANR的原因及預防措施。

  • ANR是指應用程式無響應,即在特定時間內未能處理使用者的輸入事件或未完成系統要求的定時任務,導致使用者體驗下降。常見原因及預防措施包括:
  • 主執行緒阻塞:長時間執行的計算、數據庫操作、網絡請求等。預防措施是將耗時操作放入子執行緒,使用異步處理。
  • BroadcastReceiver超時:在onReceive()方法中執行耗時任務。應在BroadcastReceiver中快速處理邏輯,復雜操作移至服務或異步任務。
  • InputEvent超時:未及時處理使用者輸入事件。確保主執行緒響應迅速,避免阻塞。
  • 請簡述Android中的記憶體泄漏及其檢測與解決方法。
  • 記憶體泄漏是指程式在申請記憶體後,無法釋放已不再使用的記憶體空間,造成系統資源浪費,嚴重時可能導致套用卡頓甚至崩潰。

    檢測與解決方法:

  • 使用Android Studio Profiler、LeakCanary等工具動態監測記憶體泄漏。
  • 檢查是否存在長期持有Context參照的物件,如非靜態內部類、單例模式中的Context參照等,應使用弱參照或適當生命周期的Context。
  • 確保及時解除監聽器、回呼等物件的註冊,防止匿名內部類持有Activity/Fragment參照。
  • 註意Cursor、FileInputStream等資源的關閉,以及Bitmap、Drawable等大物件的正確回收。
  • Android中的行程和執行緒的區別,以及它們在Android系統中的角色。

  • 行程:作業系統分配資源和排程的基本單位,每個行程有獨立的記憶體空間。Android中,每個套用通常對應一個主行程,還可以根據需要建立多個行程。系統根據行程的重要性和資源狀況進行排程和管理,如低記憶體時可能殺死後台行程。
  • 執行緒:CPU排程和執行的最小單元,同一行程內的執行緒共享記憶體空間。在Android套用中,主執行緒負責UI互動,子執行緒處理耗時任務。
  • 角色: 行程主要用於隔離不同套用和套用內不同模組,保證安全性、資源分配和故障隔離。執行緒則負責具體的任務執行和並行處理,提高套用的響應速度和執行效率。
  • 簡述Android中Activity的生命周期,並說明在哪些生命周期方法中適合進行哪些操作。

  • Activity的生命周期包括以下幾個關鍵方法:
  • onCreate():初始化元件、設定布局、繫結數據等。
  • onStart():Activity變為可見狀態,但未與使用者互動。 - onResume():Activity處於前台,可與使用者互動。
  • onPause():新Activity啟動或部份覆蓋當前Activity時呼叫,保存關鍵狀態資訊,暫停動畫或耗時操作。
  • onStop():Activity完全不可見,釋放不影響UI狀態的資源。
  • onDestroy():Activity即將被銷毀,釋放所有資源。
  • 操作:

  • onCreate():初始化工作,載入布局,設定監聽器等。
  • onStart()、onResume():啟動或恢復網絡請求、傳感器監聽等。
  • onPause():停止動畫、網絡請求、保存臨時數據、登出監聽器等。
  • onStop():釋放不再使用的資源,如大物件、數據庫連線等。
  • onDestroy():清理所有資源,如取消異步任務、關閉數據庫等。
  • 請解釋一下Android中View的工作原理,包括MeasureSpec、Layout、Draw流程。

  • MeasureSpec: MeasureSpec是父容器傳遞給子View的一個32位元int值,包含測量模式(MeasureSpec.MODE)和尺寸大小(MeasureSpec.SIZE)。在onMeasure() 方法中,View根據MeasureSpec確定自身的尺寸。
  • Layout: 父容器呼叫子View的layout() 方法,傳入左、上、右、下四個座標值,子View據此確定自己的布局位置。
  • Draw: View的繪制流程如下: - dispatchDraw():父容器遍歷所有子View,呼叫draw() 方法。
  • onDraw():View繪制自身內容,如文字、圖片等。
  • onDrawForeground():繪制前景元素(API 23及以上)。
  • onDrawScrollBars():繪制捲軸(如有)。
  • 請簡述Android中的MVVM架構模式,並闡述其相對於MVC、MVP的優勢。

    MVVM: Model-View-ViewModel架構中,Model負責數據和業務邏輯,View負責顯示UI,ViewModel作為橋梁,持有Model數據並對數據進行加工,同時暴露可觀察的數據物件供View訂閱,實作數據繫結和自動更新。

    優勢:

    相比於MVC、MVP:

    解耦更徹底:ViewModel與View之間透過數據繫結通訊,無需直接相互參照。

    易於測試:ViewModel不含UI相關邏輯,便於進行單元測試。

    開發效率高:利用數據繫結庫(如Data Binding、Jetpack Compose),減少手動編寫findViewById和數據同步程式碼。

    請簡述Kotlin協程在Android開發中的作用,並給出一個使用場景。

    Kotlin協程: 協程是一種輕量級的異步編程方式,透過掛起函數實作非阻塞的並行處理,簡化異步程式碼,提升程式的可讀性和可維護性。

    作用:

    簡化異步編程:避免回呼地獄,程式碼邏輯更清晰。

    更高效的資源利用:相比執行緒,協程切換開銷小,更適合I/O密集型任務。

    更好的控制流:提供掛起、取消、例外處理等機制。使用場景: 在網絡請求中,使用協程替代傳統異步回呼:lifecycleScope.launch