续 “在activity之间传递handler(二)”~
要解决的问题是: 在 activity A 里面打开了另一个activity B,在activity B 不关闭的情况下,也就是界面layout不变,发消息给前一个activity A, activity A接收消息,执行对应的操作。最先想用handler在activity之间传递消息,现在想到其实用broadcast也可以达到同样的目的,虽然不需要handler了。这种广播的方式也可以保持代码的独立性和私密性。
用Broacast的方法在两个activity之间传递数据。假设两个activity分别为MainActivity和OtherActivity,方法详细步骤如下。
1.在MainActivity里面定义广播接收器BroadcastReceiver,并注册。
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("TAG"," ++ broadcastReceiver++ ");
textViewOld.append(intent.getExtras().getString("ActivityB") + "\n");
}
};
注册代码如下,OtherActivity.action是定义在OtherActivity里面的静态变量。
IntentFilter filter = new IntentFilter(OtherActivity.action);
registerReceiver(mReceiver,filter);
2.在OtherActivity里面发送广播,需要定义intent,把action设置进去,再绑定要发送的数据。这里还定义了一个按钮,点击按钮,activity就发送广播。
public static final String action = "jason.broadcast.action";
buttonBroadcast = (Button)findViewById(R.id.buttonBroadcast);
buttonBroadcast.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent2 = new Intent(action);
intent2.putExtra("ActivityB","I am from the broadcast of activity B");
sendBroadcast(intent2);
}
});
3.MainActivity就收到广播啦。将广播里intent的内容解析出来就可以执行对应操作了。
附Tips:
另一个activity开始时,应用就启动了一个新线程,此时原来activity的线程并没有停止,它继续运行。
总结:
用了三种方法在activity之间传递数据,保持app的layout不变,另外的activity接收消息执行操作:(1)static handler 的方法,用handler发送message (2)定义application,在application作为中间媒介传递handler,用handler发送message (3)用broadcast传递intent,intent里面绑定数据。