android开发-Activity和Fragment的生命周期
Activity有三种状态:
当它在屏幕前台时,响应用户操作的Activity, 它是**或运行状态;
当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时, 它处于暂停状态;
当它完全被另一个Activity覆盖时则处于停止状态;
当Activity从一种状态转变到另一种状态时,会调用其生命周期方法。
详情:
1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。
2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。
3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。
4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。
5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
测试代码:
public class MainActivity extends AppCompatActivity {
public static final String TAG = "Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "=====onCreate");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "=====onRestart");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "=====onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "=====onResume");
}
@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");
}
}
而Fragment 是依赖于Activity的,不能独立存在的;一个Activity里可以有多个Fragment;一个Fragment可以被多个Activity重用;Fragment有自己的生命周期,并能接收输入事件;我们能在Activity运行时动态地添加或删除Fragment。
其中的优势有:
模块化(Modularity):我们不必把所有代码全部写在Activity中,而是把代码写在各自的Fragment中;
可重用(Reusability):多个Activity可以重用一个Fragment;
可适配(Adaptability):根据硬件的屏幕尺寸、屏幕方向,能够方便地实现不同的布局,这样用户体验更好;
Fragment 相对于Activity 比较,多出了几个回调函数:
1、onAttach(),当 Fragment 和 Activity 建立关联时调用。
2、onCreateView(),当为 Fragment 创建视图时调用。
3、onActivityCreated(),与 Fragment 关联的 Activity 已经创建完毕时调用。
4、onDEstroyView(),当与 Fragment 关联的视图被移除时调用。
5、onDetach(),当 Fragment 和 Activity 接触关联是调用。
Fragment生命周期详情:
测试代码:
public class UserFragment extends Fragment {
public static final String TAG = "Fragment";
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(TAG, "onAttach");
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Log.d(TAG, "onCreateView");
View view = inflater.inflate(R.layout.user_fragment, container, false);
return view;
}
@Override
public void onActivityCreated(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();
Log.d(TAG, "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();
Log.d(TAG, "onDestroyView");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
public void onDetach() {
super.onDetach();
Log.d(TAG, "onDetach");
}
}
推荐阅读
-
AndroidX下使用Activity和Fragment的变化详解
-
AndroidX下使用Activity和Fragment的变化详解
-
详解Android activity与fragment之间的通信交互
-
Android开发使用Activity嵌套多个Fragment实现横竖屏切换功能的方法
-
Android开发之进程的种类和介绍
-
Android实现音乐播放进度条传递信息的两种方式(在service和activity中)
-
关于Android开发中线程和线程池的知识记录
-
Android开发关于内存抖动的分析和注意事项
-
Fragment和Activity之间传值的方法
-
Android开发之OpenGL、OpenGL ES的概念和实例讲解