《AndroidFragment生命周期》
一、 说明
本文主要讲Android的Fragment的生命周期
二、 所用工具
Android Studio
三、 具体内容
1.书写代码
创建两个xml页面、两个Activity,和一个是继承Fragment的类
以下是我个人的代码
第一个xml代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 另一个xml要在此xml容器中所占区域的大小-->
<LinearLayout
android:id="@+id/ll_main_content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical" >
</LinearLayout>
<!-- 线-->
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000000">
</View>
<!-- 黑线下方内容-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="测试按钮"
android:onClick="testClick"
android:textSize="50dp"
android:gravity="center">
</Button>
</LinearLayout>
</LinearLayout>
另一xml代码:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="测试页面"
android:textSize="50dp"
android:gravity="center"
android:textAlignment="center">
</TextView>
</LinearLayout>
</LinearLayout>
第一个Activity代码:
public class MainActivity extends AppCompatActivity {
//当前上下文
private Activity myConcent;
//声明一个变量主要是为了在Debug输出中好查找
private final String TAG="LIFE MainActity";
@Override
protected void onCreate(Bundle savedInstanceState) {
myConcent=this;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
}
//点击事件
public void testClick(View view){
//获取Fragment管理器 FragmentManager
FragmentManager fragmentManager = this.getSupportFragmentManager();
//开始Fragment事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
//获取到要显示的对象的类(TestFragment为继承Fragment的类)
TestFragment contentFragment = new TestFragment();
//第一个参数为被嵌入的容器的id
//第二个参数为显示的对象
transaction.add(R.id.ll_main_content, contentFragment);
//把要显示的对象添加到该容器中
//显示
transaction.show(contentFragment);
//提交事务
transaction.commit();
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart: ");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume: ");
}
}
另一个Activity代码:
public class ContentActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_test);
}
}}
继承Fragment的类的代码:
public class TestFragment extends Fragment {
private final String TAG = "FLIFE TestFragment";
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
Log.d(TAG, "onAttach: ");
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_test,container,false);
Log.d(TAG, "onCreateView: ");
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate: ");
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.d(TAG, "onActivityCreated: ");
}
@Override
public void onStart() {
super.onStart();
Log.d(TAG, "onStart: ");
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
Log.d(TAG, "onPause: ");
}
@Override
public void onStop() {
super.onStop();
Log.d(TAG, "onStop: ");
}
@Override
public void onDestroyView() {
super.onDestroyView();
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach: ");
}
}
2.运行代码
接着查看Debug输出(输出内容较多,所以上面声明了一个TAG变量,按照该变量的关键字进行筛选便能看到以下效果)
输出的内容为如下:
图一:
也就是说Activity创建时会是这样的顺序
onCreate=====》 onStart=====》onResume
接着我们点击测试按钮
输出的内容变成:
图二:
对比图一可知:
Fragment是基于Activity的,而且状态是
OnResume=====>onAttach=====>onCreate=====>onCreateView=====>onActivityCreated=====>onStart
然后我们按返回
输出的内容为:
图三:
对比图二
由此可见关闭时是:
TestFregement:onPause=====>MainActivity:onPause=====>
TestFregement:onStop=====>MainActivity:onStop=====>
TestFregement:onDestroy=====> TestFregement:onDetach=====>
MainActivity:onDestroy