一、基礎
1. Android是個多使用者系統
2. 預設情況下, Android為每個應用程式指派一個獨立的使用者名稱, 只有Android系統知道這個使用者名稱, 應用系統本身並不知道, Android為這個使用者指派應用所需的許可權。
3. 每個應用運行在獨立的VM中,所以不同的應用之間是無法無法訪問的。
4.預設情況下, 每個應用程式運行在獨立的Linux進程中, 當應用中的任何組件被執行時,Android將啟動這個進程。
應用之間的互動:
1. 兩個應用程式可以被指定共用同一個使用者名稱, 這樣兩個程式就可以訪問彼此的檔案。
2.所有的應用程式可以在安裝時候申請連絡人, 簡訊息,記憶卡等的存取權限。
應用組件:
1. Activity : 一個Activity對應一個顯示頁面,一個應用程式中的Activity可以被其它應用程式調用。
2. Service : Service是一個後台啟動並執行組件, 它沒有UI, 其它組件可以啟動它。
3. ContentProvider : 提供一種資料互動的方式
4. BroadcastReceiver : 用於響應一個系統級的通知,沒有UI,但是可以產生一個狀態列通知。
各種組件之間的互動:
1. 可以通過傳遞Intent到startActivity或是startActivityForResult來啟動Activity
2. 可以通過傳遞Intent到startService來啟動Service,或者通過傳遞Intent到bindService來綁定到一個Service
3. 可以通過傳遞Intent到sendBroadcast, sendOrderedBroadcast或sendStickyBroadcast來初始化一個Broadcast
4. 可以能過調用query方法來訪問ContentResolver
AndroidMenifest.xml
Android在啟動一個應用的組件前, 必須通過AndroidMenifest.xml檔案來載入組件, AndroidMenifest.xml檔案必須放在應用程式的根目錄。
*定義應用中所有的組件
1. 聲明應用的使用者名稱所需要申請的許可權
2. 定義所需的API的最低層級
3. 定義所需的硬體及軟體
4. 應用所需的Android之外的其它API
## 聲明包含組件
<?xml version="1.0" encoding="utf-8"?><br /><manifest ... ><br /> <application android:icon="@drawable/app_icon.png" ... ><br /> <activity android:name="com.example.project.ExampleActivity"<br /> android:label="@string/example_label" ... ><br /> </activity><br /> ...<br /> </application><br /></manifest>
<activity>, <service>和<provider>必須在Menifest中聲明, 否則, 這些組件將不能被訪問。
<receiver>可以在Menifest中聲明, 也可以動態在代碼中通過registerReceiver定義。
通過在一個組件中聲明<intent-filter>,可以指定該組件所響應的Intent.
Activity的狀態:
1. Resume - 前台Activity並且擁有使用者焦點的狀態, 或叫running
2. Paused - 其它Activity位於前台並擁有使用者焦點, 但是該應用未被完全覆蓋, 該應用的所有屬性都將儲存在記憶體中, 但是當記憶體極度缺少時系統會終止該應用。
3. Stopped - 後台啟動並執行Activity, 狀態被維護在記憶體中, 但是系統可能會釋放其記憶體。
Activity回呼函數:
1. onCreate - 當Activity被建立時執行
2. onStart - 當Activity即將可見時執行
3. onResume - 當Activity已經變為可見後
4. onPause - 另一個Activity變為目前狀態
5. onStop - Activity不可見時, 狀態已為Stopped
6. onDestory - Activity即將被銷毀
在重寫以上方法時需要先調用super的對應方法。
Activity完整生命週期: onCreate -> onDestory
Activity可見生命週期: onStart -> onStop
Activity前台生命週期: onResumt -> onPause
Activity A啟動Activity B時的生命週期:
1. A的onPause被調用
2. B的onCreate, onStart, onResume順序被調用
3. 如果A已經不顯示, 則A的onStop被調用。