Android知識點總結

Android四大組件

  • Activity、BroadcastReceiver、ContentProvider、Service

四大組件生命週期方法和簡單用法

  • Activity生命週期方法:
    onCreate()、onStart()、onResume、onPause()、onStop()、onDestroy()、onRestart()

    Activity的生命週期:Activity生命週期
    Activity的啓動流程:Activity的啓動流程

  • BroadcastReceiver生命週期方法:
    onReceive()

    BroadcastReceiver簡單用法和工作過程:BroadcastReceiver 工作過程

  • ContentProvider方法:
    onCreate()、getType()、query()、insert()、delete()、update()。

    onCreate()會在ContentProvider創建時調用。其它需要ContentResolver的對應方法觸發。

    ContentProvider用法:ContentProvider使用

  • Service生命週期方法:
    1、 startService 生命週期:
    onCreate -> onStartCommand -> onDestroy
    重複啓動會執行onStartCommand

    2、bindService 生命週期:
    onCreate -> onBind -> onUnbind -> onDestroy
    重複綁定不會走生命週期方法

    Service的啓動流程:Service啓動流程Android Service使用

Activity之間的通信方式

  • Intent : 啓動Activity的時候通過Intent傳值,可以跨進程通信
  • BroadcastReceiver : 通過廣播可以實現跨進程、實時、互相通信
  • Service : 通過bindService 的方式可以實現跨進程、實時、相互通信。
    缺點:比較複雜
  • 通過Application的全局變量、File、數據庫、SharedPreference 可以實現Activity之間通信。缺點:不能實時通信。
  • EventBus 之類:實時,不能跨進程

Activity 各種情況下的生命週期

Activity與Fragment之間生命週期比較

  • 首先要知道Fragment 11個生命週期方法:

      onAttach、onCreate、onCreateView、onActivityCreated、onStart、onResume、
      onPause、 onStop、onDestroyView、onDestroy、onDetach
    
  • 在Activity中添加Fragment,Activity和Fragment完整生命週期如下:
    Activity: onCreate
    fragment: onAttach
    fragment: onCreate
    fragment: onCreateView
    fragment: onActivityCreated
    Activity: onStart
    fragment: onStart
    Activity: onResume
    fragment: onResume
    fragment: onPause
    Activity: onPause
    fragment: onStop
    Activity: onStop
    fragment: onDestroyView
    fragment: onDestroy
    fragment: onDetach
    Activity: onDestroy

兩個Activity之間跳轉時必然會執行的是哪幾個方法?

  • A 必然會執行: onPause, 因爲B如果是個透明主題的Activity,就不會執行onStop方法。
  • B 必然會執行:onStart、onResume, 因爲如果B是SingleTask啓動模式,並且已經在棧內存在,則不會再次創建。

前臺切換到後臺,然後再回到前臺,Activity生命週期回調方法。彈出Dialog,觸發回調方法。

  • 前臺切換到後臺 : onPause、 onStop
  • 回到前臺 :onRestart、onStart、onResume
  • 彈出Dialog時觸發 :onWindowFocusChanged, 彈出hasFocus爲false,消失hasFocus爲true。

Activity的四種啓動模式對比

  • Standard :默認啓動模式,每次啓動都會創建一個Activity實例
  • SingleTop :棧頂複用模式,當要啓動的Activity位於棧頂時,則直接複用此Activity,不會創建新的Activity。並且觸發onNewIntent方法。此過程聲明週期方法:onPause、 onNewIntent、 onResume
  • SingleTask : 棧內複用模式,當要啓動的Activity已經位於棧內,則不會重新創建,而是直接銷燬位於該Activity棧上面的其他實例,使該Activity位於棧頂。該Activity聲明週期爲:onNewIntent、 onRestart、onStart、onResume
  • SingleInstance : 單實例模式,加強的SingleTask模式,除了具有SingleTask特點,系統還會爲此模式的activity單獨創建一個任務棧,使該activity單獨位於一個任務棧中
    參考:activity啓動模式

Activity狀態保存於恢復

Activity狀態恢復一般指橫豎屏切換時(或者當內存不足時,被回收的後臺Activity),Activity銷燬與重建時數據的保存與恢復。

  • onSaveInstanceState : 在該方法中保存數據。在onStop之前調用
  • onRestoreInstanceState : 在該方法中恢復保存的數據。onStart之後調用

當Activity在manifest中設置configChanges屬性時:android:configChanges="orientation",橫豎屏切換Activity不會銷燬重建,而是執行onConfigurationChanged方法

Fragment之間傳遞數據的方式?

  • 廣播
  • 全局變量通過set、get方法傳遞
  • 本地存儲
  • EventBus之類

service和activity怎麼進行數據交互?

  • 通過廣播 : 優點:支持跨進行
  • 通過EventBus之類 : 缺點:不支持跨進程
  • 通過AIDL : 跨進程方案
  • bindService : 綁定時通過Intent傳值給Service,綁定成功後在onServiceConnected中獲得在onBind方法中返回的IBinder 實例,通過該IBinder實例調用Service中的方法。 可參考:Android Service使用

談談你對ContentProvider的理解

ContentProvider是應用程序間共享數據的接口,通過ContentProvider可以實現不同應用程序間的數據共享。

說說ContentProvider、ContentResolver、ContentObserver 之間的關係

  • ContentProvider : 內容提供者。內部類Transport是一個Binder子類,並且實現IContentProvider接口,負責接收ContentResolver請求,並調用ContentProvider增刪改查方法
  • ContentResolver : 內容解析者。通過authority屬性,獲得對應IContentProvider對象,調用IContentProvider增刪改查方法,通過Binder機制,在ContentProvider 內部類Transport中接收。
  • ContentObserver : 內容觀察者。通過getContentResolver().registerContentObserver(uri,notifyForDescendants,observer)註冊觀察者,當uri中內容發生變化時,會觸發監聽。

廣播的分類

  • 普通廣播 : sendBroadcast, 所有註冊的廣播都能收到
  • 有序廣播 : sendOrderedBroadcast, 優先級高的先收到,並且有修改廣播內容和決定是否繼續下發給低優先級廣播的權利

廣播使用的方式和場景

  • 靜態註冊 : 在XML文件中註冊。場景:需要時刻監聽廣播
  • 動態註冊 : registerReceiver()。 場景:特定頁面監聽廣播

本地廣播和全局廣播有什麼差別?

  • 註冊方式 : 本地廣播只能通過LocalBroadcastManager進行註冊、發送、解除註冊等。LocalBroadcastManager.getInstance(this).registerReceiver()
  • 作用域 : 全局廣播可以是應用內和應用之間使用,本地廣播只能本應用內使用。

AlertDialog,PopupWindow,Activity區別

  • 級別不同 : Activity 是四大組件之一,而AlertDialog、PopupWindow都是依附在DecorView上的,即依附在Activity上。
  • 是否阻塞 : PopupWindow點擊陰影背景彈框不能消失,除非調用dismiss方法,AlertDialog可以消失
  • 背景是否全屏 : PopupWindow 背景可以不是全屏顯示,AlertDialog背景全屏顯示

Application 和 Activity 的 Context 對象的區別

  • 繼承關係:Activity -> ContextThemeWrapper -> ContextWrapper -> Context,
    Application -> ContextWrapper -> Context,

  • 聲明週期長短 : Activity中的Context是當前頁面的Context,Application的Context是整個應用的Context

Android屬性動畫特性

  • 可以對任意對象的屬性執行動畫操作
  • 真正改變View的本身屬性(區別於補間動畫只改變View的顯示效果)

Android中數據存儲方式

  • 使用SharedPreferences存儲數據。/data/data/Package Name/Shared_Pref
  • 文件存儲數據
  • SQLite數據庫存儲數據。 /data/data/Package Name/database
  • 使用ContentProvider存儲數據
  • 網絡存儲數據

介紹下SurfView

SurfaceView 是 Android 中一種比較特殊的視圖(View),它跟平時時候的 TextView、Button 最大的區別是它跟它的視圖容器並不是在同一個視圖層上,它的 UI 顯示也可以不在一個獨立的線程中完成,所以對 SurfaceView 的繪製並不會影響到主線程的運行。綜合這些特點,SurfaceView 一般用來實現動態的或者比較複雜的圖像還有動畫的顯示。

Android SurfaceView 源碼分析及使用

Fragment懶加載

Fragment懶加載就是Fragment可見(並且已經執行onCreateView加載佈局)後才進行數據加載。
可以通過setUserVisibleHint(boolean isVisibleToUser)(ViewPage中)或者onHiddenChanged(boolean hidden)(FragmentManager管理)方法來判斷是否可見,進行數據加載。

Fragment嵌套Fragment,通過getChildFragmentManager(),讓當前的Fragemnt去管理Fragment。

發佈了85 篇原創文章 · 獲贊 19 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章