续 “在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里面绑定数据。

本文介绍了如何在不关闭Activity B的情况下,从Activity B向Activity A发送广播,使A接收到消息并执行相应操作。通过在MainActivity中定义BroadcastReceiver并注册,然后在OtherActivity中发送广播,实现了Activity间的通信。这种方式保持了代码的独立性和私密性。
4396

被折叠的 条评论
为什么被折叠?



