android注銷廣播
⑴ android開發 service 和activity 廣播問題
這里我們先假定service發出內容時候的Action為ActionS。
如果activity里沒有動態注冊監聽service發出的ActionS的廣播, 即使Activity當前在使用中也不會得到通知, 更不用說未啟動的Activity來捕獲這個通知了。
要捕獲這個字元串有兩種方式, 分別如下
在AndroidManifest.xml中注冊
<receiver android:name="YourBroadcastReceiver" >
<intent-filter>
<action android:name="ActionS" />
</intent-filter>
</receiver>
這樣, 一旦有定義的ActionS發出來,YourBroadcastReceiver的onReceive方法就會回調了,這樣的監聽,不需要你的app已經在運行。你在onReceive方法里攔截處理。
2.在Activity中動態創建監聽器, onCreate()中生成一個IntentFilter對象
IntentFilter filter=new IntentFilter();
//為IntentFilter添加一個ActionS
filter.addAction(ActionS);
yourBroadcastReceiver = newYourBroadcastReceiver();
registerReceiver(yourBroadcastReceiver, filter);
在onDestroy的時候去注冊
unregisterReceiver(yourBroadcastReceiver);
這樣的方式只有在Activity生命周期onCreate()-onDestroy()之間有效, 在YourBroadcastReceiver.onReceive()方法里攔截處理。
⑵ 注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。
android中,不同進程之間傳遞信息要用到廣播,可以有兩種方式來實現。
第一種方式:在Manifest.xml中注冊廣播,是一種比較推薦的方法,因為它不需要手動注銷廣播(如果廣播未注銷,程序退出時可能會出錯)。
具體實現在Manifest的application中添加:上面兩個android:name分別是廣播名和廣播的動作(這里的動作是表示系統啟動完成),如果要自己發送一個廣播,在代碼中為:
Intent i = new Intent(「android.intent.action.BOOT_COMPLETED」);
sendBroadcast(i);
這樣,廣播就發出去了,然後是接收。
接收可以新建一個類,繼承至BroadcastReceiver,也可以建一個BroadcastReceiver的實例,然後得寫onReceive方法,實現如下:
protected BroadcastReceiver mEvtReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(「android.intent.action.BOOT_COMPLETED」)) {
//Do something
}
}
};
第二種方式,直接在代碼中實現,但需要手動注冊注銷,實現如下:
IntentFilter filter = new IntentFilter();
filter.addAction(「android.intent.action.BOOT_COMPLETED」);
registerReceiver(mEvtReceiver, filter); //這時注冊了一個recevier ,名為mEvtReceiver,然後同樣用上面的方法以重寫onReceiver,
最後在程序的onDestroy中要注銷廣播,實現如下:
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mPlayerEvtReceiver);
}
⑶ 求助 關於Android廣播如何全局監聽
這個是onCreate裡面的代碼
// 注冊接收新消息的監聽廣播
msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager
.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
下面是自己寫的廣播里的操作
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// 注銷廣播
abortBroadcast();
// 消息id(每條消息都會生成唯一的一個id,目前是SDK生成)
String msgId = intent.getStringExtra("msgid");
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
String news = ((TextMessageBody) message.getBody()).getMessage();
// 發送人id
String userId = intent.getStringExtra("from");
username = userId;
Info info = new Info();
info.setText(news);
info.setId(msgId);
info.setUserid(userId);
list.add(info);
}
}
⑷ 12、注冊廣播有幾種方式,這些方式有何優缺點請談談Android引入廣播機制的用意。
注冊廣播的分類:靜態注冊和動態注冊。
靜態注冊:在清單文件里直接注冊,從app開啟到app銷毀,一直在接收廣播,接收廣播時間長,但是接收廣播的優先順序低於動態注冊廣播。
動態注冊:動態注冊,動態銷毀,從onCreate到取消注冊,期間接收廣播,接收廣播時間是短且可控,接收廣播的優先順序高。例如:
發送廣播:
Intent i = new Intent();
i.setAction("ACTION_CLOSE");
sendBroadcast(i);
接受廣播:
onCreate(){
//注冊廣播的接受者
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION_CLOSE_ACTIVITY");
receiver = new InnerReceiver();
registerReceiver(receiver, filter);
}
private class InnerReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//TODO 當前Activity接收到廣播 需要做的事情
}
}
}
//注銷廣播
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
2.引入廣播的原因:
a) 不同的app之間傳信通用
b)發出一條指定,需要多個Activity都需要有反應
注意:以上僅供參考,如有疑問,請追問,謝謝。
⑸ Android 第六講 廣播接收器和服務
兩種方式:靜態注冊和動態注冊
動態注冊:
1)動態注冊:需要定義一個繼承自BroadcastReceiver類的子類,該接收器需要在Activity中的onDestroy中注銷
2)靜態注冊:通過在AndroidManifest.xml中配置
兩種廣播形式:有序廣播和無序廣播
1)無序廣播:接受標准廣播的接收器將同時收到廣播消息,非同步執行,沒有先後順序 sendBroadCast
2)有序廣播:sendOrderedBroadCast,按照一定順序先後被接受順序,由priority屬性決定,abortBroadCast中斷廣播
如果只想在本應用中發送和接受廣播,使用LocalBroadcastReceiver來對廣播進行管理
本地廣播不支持靜態注冊
優點 :安全高效
Service是Android中的一種組件,和Activity的級別一致,但不能自己運行,只能後台運行,和其他組件交互,服務必須注冊才能使用
本地服務:服務依附在主線程中,節約資源,主線程死掉服務終止
遠程服務:服務在獨立進程中,靈活性好 ,佔用資源高
兩種服務的啟動模式:
1)start方式:調用者和服務之間沒有關聯,調用者退出不會影響服務,startService啟動服務,如果服務不存在,調用onCreat方法,然後onStartCommand被調用。stopService關閉服務,onDestroy方法被調用
2)bind方式:調用者和服務綁定,調用者退出,服務終止bindService啟動服務,onCreate方法創建服務,onBind方法綁定服務,onUnbind方法解綁,onDestory在服務結束時調用