Activity(使用中視窗):
Android程式中最基本的模組,為使用者操作而展示的可視化使用者介面。一個Android應用程式可以只有一個Activity,也可以包含多個Activity,數量及每個Activity的作用取決於應用程式及其設計。
(1)Activity的生命週期
建立→運行 onCreate onStart onResume
運行→銷毀 onPause onStop onDestory
運行→停止(不可見 不可操作) onPause onStop
停止→恢複 onRestart onStart onResume
運行→暫停(可見 不可操作) onPause
暫停→恢複 onResume
備忘:當Activity處於暫停或停止狀態的時候,如果有更高優先順序的應用需要記憶體時,該Activity所在應用可能被銷毀。
(2)應用舉例:資料持久化
存:onPause onStop onDestory
取:onCreate onStart onResume
Service(服務):沒有介面,運行在後台
(1)Service的建立:
a. 建立一個類繼承Service
b. 重寫onbind()方法
c. 資訊清單檔中註冊 android:name="包名.類名"
(2)啟動服務
Intent serviceIntent = new Intent(this,MyService.class);
startService(serviceIntent);
備忘:第一次啟動,會觸發Service的onCreate和onStartCommand方法;如果服務已經存在,則多次點擊啟動服務,只會調用onStartCommand方法。
(3)停止服務
stopService(serviceIntent);
(4)綁定服務
bindService(serviceIntent,xxx,xxx);
a. serviceIntent:表示一個Intent對象;
b. 第二個參數:表示一個ServiceConnection對象,例如:
ServiceConnection conn =new ServiceConnection;
c. 第三個參數:Context.BIND_AUTO_CREATE 表示如果服務不存在,會自動建立一個服務。
(5)解除綁定服務
unbindService(conn);
(5)通過綁定調用Service中的方法
a. 建立一個類MyBinder繼承Binder
b. 在該類中添加所需要調用的Service中的方法
c. 在onBinder()方法中,返回一個MyBinder類型的對象
d. 在Activity的onServiceConnected()方法中,得到IBinder類型對象
e. 將IBinder類型對象強轉為MyBinder類型
BroadcastReceiver(廣播接收器)
(1)廣播:單項、群發,作為Android內部資訊傳輸的機制。
(2)廣播接收器的建立:
a. 建立一個類MyReceiver繼承BroadcastReceiver;
b. 重寫onReceive()方法;
c. 資訊清單檔中註冊
android:name="包名.類名"
(3)應用自己發送廣播
//建立Intent對象
Intent intent = new Intent();
//設定過濾條件
intent.setAction("xxx");
//發送廣播
sendBroadcast(intent);
(4)接收廣播
a. 在資訊清單檔中註冊廣播
<intent-filter>
<action android:name="xxx"/>
</intent-filter>
只要條件匹配,就能接收廣播
b. 在代碼中註冊廣播
//建立IntentFilter對象
IntentFilter filter = new IntentFilter();
//添加過濾條件
filter.addAction("xxx");
//建立MyReceiver對象
MyReceiver receiver = new MyReceiver();
//註冊廣播
registerReceiver(filter,receiver);
//登出廣播
unregisterReceiver(receiver);
ContentProvider(資料共用)
一個用來提供資料共用的組件,主要將一些特定的應用程式資料提供給其他應用程式使用,這些應用程式資料可以儲存於檔案系統或者SQLite資料庫中。在Android程式中,共用資料的實現需要繼承自ContentProvider基類,該基類為其他應用程式使用和儲存資料實現了一套標準方法。然而,應用程式並不直接調用這些方法,而是使用一個ContentResolver對象,並通過調用它的方法作為替代。ContentResolver對象提供了query、insert及update等方法,可以對共用資料執行各種操作。
(1)ContentResolver(內容解析者)樣本:讀取系統連絡人
//建立ContentResolver對象
ContentResolver resolver = getContentResolver();
//使用query方法擷取連絡人資訊
Cusor cusor = resolver.query(Phones.CONTENT_URI, null, null, null, null);
//遍曆連絡人資訊
while(cursor.moveToNext()){
//根據欄位名擷取該欄位的索引位置
int nameIndex = cursor.getColumnIndex(Phones.NAME);
int numberIndex = cursor.getColumnIndex(Phones.NUMBER);
//根據索引擷取連絡人資訊
String name = cursor.getString(nameIndex);
String number = cursor.getString(numberIndex);
}
//關閉cursor對象
cursor.close();