您的位置:首页 > 其它

在activity之间传递handler(三)

2016-01-12 15:04 405 查看
续 “在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里面绑定数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: