Android的Service也運行在主線程,但是在服務裡面是沒法直接調用更改UI,如果需要服務傳遞消息給Activity,通過廣播是其中的一種方法: 一、在服務裡面發送廣播 通過intent傳送數據、通過setAction 設置Activity接收廣播時要過濾的動作名 二、在Activity中創建 ...
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(); }
總結:通過發送廣播,是一種實現了服務和活動之間互相通信的方式。