![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CM2MjY5UzNhFWNygzNwIWZkFjYxIzY4gDO3kTOlJDMx8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
一.四大元件是什麼
Android 四大元件是Activity、Service、BroadcastReceive、ContentProvider
Activity直接與使用者互動的元件
周期:onCreate=>onStart=>onResume=>onPaused=>onStop=>onDestroy
啟動模式: standard、singleTop、singleTask、singleInstance
1. 橫豎屏切換生命周期不重新開機 設定android:configChanges
2.資料恢複
onSaveInstanceState-->onStop-->
onStart-->onRestoreInstanceState-->
Service服務是運作在背景的元件,無需與使用者進行互動
啟動方式:
1.StartService: onCreate=>onStartCommand=>onDestroy
啟動它的元件無關聯,銷毀需調用stopSelf或stopService
2.bindService: onCreate=>onBind=>onUnbind=>onDestroy
與啟動元件綁定,所有綁定元件銷毀後執行完unBind才會銷毀
注:它本身還運作在主線程中,是以耗時邏輯仍需工作線程去完成
BroadcastReceive廣播用來在應用程式之間傳播資訊的機制
動态注冊:registerReceive 注冊元件銷毀後,廣播失效 unRegisterReceiver解除
靜态注冊:manifest中注冊 安裝時就會被系統解析一直起作用
普通廣播
通過Context.sendBroadcast()方法來發送。它是完全異步的,所有的receivers接收器的執行順序不确定 這種方式效率更高
有序廣播
通過Context.sendOrderedBroadcast來發送。所有的receiver依次執行,使用android:priority屬性設定優先級,優先級高的先收到該廣播并且可以丢棄該廣播,使該廣播不再往下發送
ContentProvider為應用提供資料共享,不用關注儲存方式
ContentProvider(内容提供者)
ContentResolver(内容解析者)
ContentObserver(内容觀察者)
1、建立自己的資料清單;
2、自定義ContentProvider實作相關的抽象方法;
3、在AndroidManifest中聲明provider以及定義相關通路權限;
4 、通過ContentResolver根據URI進行增删改查;
二.Activity之間的通信方式
1.Intent 2.借助靜态資料實作 3.借助全局變量來實作/Application 4.通過Service 5.借助外部存儲a.SharedPreference SharedPreference是存放在data/data/應用包名/shared_prefs目錄下字尾為.xml的檔案
b.SQLite SQLite是存放在data/data/應用包名/databases目錄下的字尾為.db3的檔案
c.File
三.Activity各種情況下的生命周期
正常正常啟動: onCreate=>onStart=>onResume
傳回鍵退出:onPause=>onStop=>onDestroy
按home鍵正常啟動: onCreate=>onStart=>onResume
按home: onPause=>onStop
正常啟動: onRestart=>onStart=>onResume
橫豎屏切換正常啟動: onCreate=>onStart=>onResume
橫豎屏切換:onPause=>onStop=>onDestroy=>onCreate=>onStart=>onResume
設定configChanges正常啟動: onCreate=>onStart=>onResume
橫豎屏切換:onConfigurationChanged