Bundle-android通讯部分
文章目录
- Bundle-android通讯部分
- Bundle前言
- Bundle的主要用途场合
- Bundle的使用
Bundle前言
先放一张截图
对于Activity方法来说,它的onCreate方法中就有Bundle,注意这个savedInstanceState,事实上有一个方法与之对应
这个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)。