参考
看图识�两者的生命周期
学生命周期的时候最先看的就是官方的生命周期图。
其中,
Activity的:https://developer.android.com/reference/android/app/Activity.html
Fragment的:https://developer.android.com/guide/components/fragments.html
但是,高手在民间。
github的:https://github.com/xxv/android-lifecycle
这张生命周期图比官方的不知道高到哪里去了。
在Fragment的不同生命周期回调方法中调用Activity对象的finish()方法
1.在Activity的生命周期回调方法中调用
注意,该Activity中添加了一个Fragment。
-
在onCreate()中调用
在Activity的onCreate()中调用.png -
在onStart()中调用
在Activity的onStart()中调用.png -
在onResume()中调用
在Activity的onResume()中调用.png
2.在Fragment的生命周期回调方法中调用
-
在onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()中调用
在Fragment的onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()中调用.png -
在onResume()中调用
在Fragment的onResume()中调用.png
以上,需要特别引起重视的是,在Fragment的生命周期回调方法中调用Activity对象的finish()方法。
- 在onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()任意一个回调中调用finish(),所经历的生命周期都是一样的。
比如,在Fragment的onCreate()中通过getActivity().getIntent()获取Intent对象,然后对Intent对象中的Data进行解析。
like this:
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getActivity().getIntent();
parseUriData(intent);
}
private void parseUriData(Intent intent) {
if (null == intent || null == intent.getData()) {
getActivity().finish();
return;
}
Uri data = intent.getData();
String voucher = data.getQueryParameter(ARG_VOUCHER);
if (!TextUtils.isEmpty(voucher) && !TextUtils.equals("null", voucher)) {
this.voucher = Consts.GSON.fromJson(voucher, Voucher.class);
}
}
以上代码,在Data为空的时候,会执行Activity对象的finish()方法,然后return。但生命周期还会继续往下走。
onCreateView() --> onViewCreated() --> onActivityCreated() --> onStart()...
所以,在之后的回调方法中,一定要做好判断。
Fragment的懒加载
http://yxcoding.net/2016/07/13/1468374159777/
http://www.jianshu.com/p/52daa5ff5130
网友评论