一.使用場景
如果要通知多個Activity,廣播較為適合.但廣播較為耗費性能.
二.Broadcast更新Activity中的UI
1.新建一個接口OnUpdateUI,用於回調更新UI
public interface OnUpdateUI { void updateUI(String i); }
2.BroadcastReceiver代碼
public class MyBroadcast extends BroadcastReceiver { OnUpdateUI onUpdateUI; @Override public void onReceive(Context context, Intent intent) { String progress = intent.getStringExtra("progress"); onUpdateUI.updateUI(progress); } public void SetOnUpdateUI(OnUpdateUI onUpdateUI){ this.onUpdateUI = onUpdateUI; } }
3.Activity中代碼:
public class MainActivity extends Activity { public static final String FLAG = "UPDATE"; MyBroadcast myBroadcast; TextView tip; Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tip = (TextView)findViewById(R.id.tip); myBroadcast = new MyBroadcast(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(FLAG); registerReceiver(myBroadcast, intentFilter); intent = new Intent(this, MyService.class); // 更新UI myBroadcast.SetOnUpdateUI(new OnUpdateUI() { @Override public void updateUI(String i) { tip.setText(i); } }); } protected void myClick(View v){ // 發送廣播 if( v.getId() == R.id.btn ){ Intent intent = new Intent(); intent.setAction(FLAG); intent.putExtra("progress", System.currentTimeMillis()+""); sendBroadcast(intent); } // 啟動服務 if (v.getId() == R.id.btn2){ startService(intent); } } @Override protected void onDestroy() { unregisterReceiver(myBroadcast); stopService(intent); super.onDestroy(); } }
三.Service發送廣播,廣播更新Activity中UI
Service發送廣播
Intent it = new Intent(); it.setAction(MainActivity.FLAG); it.putExtra("progress", i+""); sendBroadcast(it);