Bundle-android通讯部分


文章目录

  • Bundle-android通讯部分
  • Bundle前言
  • Bundle的主要用途场合
  • Bundle的使用


Bundle前言

先放一张截图

Android Bundle传集合_bundle


对于Activity方法来说,它的onCreate方法中就有Bundle,注意这个savedInstanceState,事实上有一个方法与之对应

Android Bundle传集合_Android Bundle传集合_02


这个onSaveInstanceState方法是在Activity在非用户行为下被销毁时调用,用来保存信息的。(用户行为:比如说点击返回键回到上一个Activity,这种情况是用户主动去销毁,所以并不会调用,但在一个Activity中重新启用一个Activity,这是不属于用户行为的,这种可以理解为用户有可能会从内部Activity返回上一个Activity,这个时候有很大可能是需要保存某些信息的)

Bundle的主要用途场合

1.Activity状态数据的保存与恢复,涉及到两个回调:①void onSaveInstanceState(Bundle outState);② void onCreate(Bundle savedInstanceState);

2.Fragment的setArguments方法:void setArgument(Bundle args);

3.消息机制中的Message的setData方法:void setData(Bundle data)。

Bundle的使用

1.事实上,在我目前所接触到的代码情况下,Bundle多用于Activity间传递消息,它的机制也并不是很复杂,Bundle使用的是键值对的方法存储信息,它支持基本数据类型,对String也同样支持,其实这已经满足基本的业务需求了,但是作为强大的Bundle,他怎么可能不支持对象(包括对象数组)呢,只是在存储对象时,必须要实现Serializable或者Parcelable.
举例:

Intent intent = new Intent(this, MainActivity.class);
        intent.putExtra("pp","xiaohu");
        Bundle bundle = new Bundle();
        bundle.putString("pp","xiaohu");
        intent.putExtras(bundle);
        startActivity(intent);

看到这段代码块,即便对intent不熟悉,也会有个疑问吧,intent已经可以携带消息了(这里我特意写成一样的),为什么还要有bundle呢?
传递对象?intent同样可以传递对象呀对吧,所以我在activity的跳转等之间,并没有怎么见过使用这个Bundle,对于Bundle怎样传递对象建议参考:

2.Fragment的setArguments方法

public static myFragment newInstance(Book book) {
	XxFragment fragment = new XxFragment();
	Bundle bundle = new Bundle();
	bundle.putString(“pp”, book);
	//fragment保存参数,传入一个Bundle对象
	fragment.setArguments(bundle);
	return fragment;
	}
}

注意这个时候传入的是一个对象,因为fragment用来展示数据的话就是需要在初始化的时候进行数据传递,这时候往往是一个类,那么注意这个类需要实现Serializable或者Parcelable进行序列化。

3.消息机制中的Message的setData方法:void setData(Bundle data)。