標籤:android activity
Service
服務
四大組件之一 沒有介面,運行在後台
要素:
1、繼承Service
2、在資訊清單檔裡面註冊
<name = 包名 + 類名>
生命週期:
開啟服務:
startService(Intent intent)
生命週期:
onCreat() onStartConmmand()
關閉服務:
stopService(Intent intent);
注意:1、通過startService開啟的服務跟Activity之間的聯絡比較鬆散(activity關閉服務不會死掉)
2、Service開啟之後繼續調用startService只會調用 onStartConmmand()
3、通過startService開啟的Service只能通過stopservice關閉
ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
//綁定異常調用
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
//綁定成功,並返回一個非空的Ibinder類型對象時調用
}
};
綁定服務
綁定服務的時候,介面關閉掉,服務隨之關閉。綁定成功的時候可以得到服務返回的資料。
Intent service = new Intent(this, MyService.class);
//綁定服務
bindService(service , conn, Context.BIND_AUTO_CREATE);
//Context.BIND_AUTO_CREATE 當服務不存在,預設去建立服務
解除綁定:
unbindService(conn);
綁定Service擷取服務返回的訊息
1、綁定成功
onBinder()會返回IBinder類型的對象
2、聲明一個類去接觸Binder(implement IBinder)
3、在聲明的類中聲明一個方法
4、在 onBinder返回聲明的類的對象
5、在Activity中的ServiceConnection 類型的對象中的onServiceConnected()中接收返回的對象
starService + binderService
廣播接受者
BroadcastReceiver
廣播機制
單向,群發。
建立:
1、繼承BroadcastReceiver
2、在資訊清單檔中註冊
註冊:
1、資訊清單檔中註冊
2、代碼中註冊
例子:
接收簡訊
1、許可權:
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
2、設定廣播接收者的過濾條件
a、在資訊清單檔中註冊
<intent-filter >
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
b、在代碼中註冊
receiver = new MyReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("android.provider.Telephony.SMS_RECEIVED");
/ /註冊廣播接受者
registerReceiver(receiver , filter );
//登出廣播接收者
unregisterReceiver(receiver);
資訊清單檔中註冊與代碼中註冊的區別
1、 資訊清單檔中註冊 進程不存在 只要過濾條件匹配就能接收廣播
2、代碼中註冊 使用靈活 進程不存在則接收不了
應用本身也可以發廣播
可以被應用本身的廣播接收者接收,也可以被其他應用的廣播接收者接收
//發送廣播
Intent intent = new Intent();
intent.putExtra("key", "ssssss");
intent.setAction("com.xinbo.mysms");
sendBroadcast(intent );
Intent
1、顯式意圖 (指定要開啟的目標)
2、隱式意圖
通過隱式意圖開啟介面:
1、在資訊清單檔為Activty設定過濾條件
<intent-filter >
<action android:name="com.yinan"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
2、Intent intent = new Intent();
intent.setAction("com.yinan");
startActivity(intent );
1、顯式意圖 只能開啟本應用的介面 只能開啟一個
2、隱式意圖 可以開啟本應用也可以開啟其他應用的介面 可以開啟多個以供選擇
Android初級第三次小結