Android的Service也運行在主執行緒,但是在服務里面是沒法直接呼叫更改UI,如果需要服務傳遞訊息給Activity,通過廣播是其中的一種方法:
一、在服務里面發送廣播
通過intent傳送資料、通過setAction 設定Activity接收廣播時要過濾的動作名
Intent intent = new Intent(); intent.putExtra("key", "test"); intent.setAction("location.reportsucc"); sendBroadcast(intent);
二、在Activity中創建內部類做為廣播接收器,需實作BroadcastReceiver
//內部類,實作BroadcastReceiver public class LocationReceiver extends BroadcastReceiver { //必須要多載的方法,用來監聽是否有廣播發送 @Override public void onReceive(Context context, Intent intent) { String intentAction = intent.getAction(); if (intentAction.equals("location.reportsucc")) { } } }
三、在Activity創建時注冊廣播接收器,
filter.addAction值必須和服務里面注冊的Action名稱一致
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); locationReceiver = new LocationReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("location.reportsucc"); registerReceiver(locationReceiver, filter); }
四、最后記住在不需要廣播接收器的時候,卸載廣播接收器,例如在Activity銷毀時卸載廣播接收器
@Override protected void onDestroy() { unregisterReceiver(locationReceiver); super.onDestroy(); }
總結:通過發送廣播,是一種實作了服務和活動之間互相通信的方式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212085.html
標籤:其他
