您好,登錄后才能下訂單哦!
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、隱式意圖 可以打開本應用也可以打開其他應用的界面 可以開啟多個以供選擇
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。