Android之 Activity间通信总结

在Android中,Activity作为界面显示。google并不推荐在Activity中做耗时操作,如果Activity操作耗时超过5s时,会提示是否等待对话框。
一般耗时操作会在Service中处理,Service主要负责长期在后台运行。
自从google推出Fragment以来,中文翻译为碎片,使用的越来越广泛。在同一个Activity界面会插入几个Fragment,用来显示不同的功能界面。
在我们的实际项目中,总是会用到Activity、Service及Fragment。Activity与它们之间是怎么进行通信,完成UI更新。接下来,我们一一道来。
一、Activity与Activity之间的通信
当A Activity打开B Activity时,大家都知道通过调用startActivity(intent),由A启动B。如果希望A传递信息给B,只需如果在intent携带即可。如果携带的信息中包含自定义类,需要将类序列化,实现接口Parcelable或者Serializable。
A启动B:

<span style="font-size:14px;">        Intent intent = new Intent(this, AtySecond_.class);
        // 设置启动Activity时携带的参数信息 的Intent
        Bundle bundle = new Bundle();
        bundle.putString("AtySecond", "AtyCommActivity传递的消息,不需要返回值");

        intent.putExtras(bundle);

        startActivity(intent);</span>
B中获取A传递的信息:

<span style="font-size:14px;">	// 获取出入的Budle
        Intent intent = getIntent();
        Bundle bundle = intent.getExtras();

        msg = bundle.getString("AtySecond", "");</span>
这种方法,大家都很熟悉,如果在关闭B Activity时,A希望从B中获取操作结果,该如何做呢?在A启动B时只能使用另外一种启动方法——startActivityForResult。startActivityForResult(Intent intent,int requestCode,)的主要作用就是它可以回传数据,其中参数intent,就是启动Activity的意图,参数requestCode是启动Activity,获取返回值的请求码,在onActivityResult作返回值处理时使用,以便分别是哪一个返回值请求。
1.A在启动B时,再使用startActivity()而是使用startActivityForResult

<span style="font-size:14px;">	// 设置启动Activity时携带的参数信息 的Intent
        Intent intent = new Intent(this, AtySecond_.class);
        Bundle bundle = new Bundle();
        bundle.putString("AtySecond", "AtyCommActivity传递的消息,需要返回值");

        intent.putExtras(bundle);

        // 参数 REQUEST_ONE :请求依据,作为在onActivityResult做处理时识别码
        startActivityForResult(intent, REQUEST_ONE);</span>
2.重写onActivityResult,来获取从BActivity返回的数据
<span style="font-size:14px;">	    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
			super.onActivityResult(requestCode, resultCode, data);

			Log.i("123", "requestCode: " + requestCode);

			if (requestCode == REQUEST_ONE) {
				if (null != data) { // data为AtySecond返回的Intent
					// msg即为回传的值
					St
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值