Activity与Fragment

Activity

生命周期

  1. 进入页面
    onCreate - onStatrt - onResumeonRestart - onPause - onStop - onDestroy
  2. 透明Activity的跳转不会执行onStop

Activity的重建

  1. 资源相关的系统配置发生改变,导致Activity被杀死并重建(如旋转屏幕)

说明:

  • onSaveInstanceState()onStop()之前,与onPause()无顺序关系。(《Android开发艺术》)(?实际运行是在onStop()之后,onDestroy()之前
  • onRestoreInstanceState()onStart()之后,onResume()之前。
  • 可以通过onCreate()或者onRestoreInstanceState()拿存储的Bundle对象,只是是否为null的区别而已,(推荐是onRestoreInstanceState()
  1. 避免在系统配置改变时重建Activity的方法

    在Manifest中添加属性android:configChanges=""(常用的是orientation|keyboardHidden|location
    此时会调用onConfigurationChanged()而不调用以上的onSaveInstanceState()onRestoreInstanceState()
    在这里插入图片描述

内存不足时Activity被回收的优先级

  1. 前台正在与用户交互的Activity;
  2. 可见,但不可交互的Activity(如弹出了对话框的Activity);
  3. 后台Activity(执行了onStop)。

应用:
如果没有四大组件运行的App会优先被系统杀死。所以有些操作可以放在Service处理以保活。

Fragment

  1. 创建
    onAttach - onCreate - onCreateView - onViewCreated - onActivityCreated - onStart - onResume

  2. 销毁
    onPause - onStop - onDestroyView - onDestroy - onDetach

  3. home键/熄屏/进入任务页
    onPause - onSaveInstanceState - onStop

  4. home后重进/亮屏/任务页重进
    onStart - onResume

ViewPager2中的Fragment的生命周期

前提: 3个Fragment, setOffscreenPageLimit(x) Fragment会比x预创建一个

  1. 进入页面(x1)
    2022-02-23 11:29:36.729 A/(AFragment.java:52)(onAttach): ---> "1"
    2022-02-23 11:29:36.730 A/(AFragment.java:58)(onCreate): ---> "2"
    2022-02-23 11:29:36.731 A/(AFragment.java:63)(onCreateView): ---> "3"
    2022-02-23 11:29:36.734 A/(AFragment.java:70)(onViewCreated): ---> "4"
    2022-02-23 11:29:36.758 A/(AFragment.java:76)(onActivityCreated): ---> "5"
    2022-02-23 11:29:36.759 A/(AFragment.java:82)(onViewStateRestored): ---> "6"
    2022-02-23 11:29:36.760 A/(AFragment.java:88)(onStart): ---> "7"
    2022-02-23 11:29:36.776 A/(AFragment.java:94)(onResume): ---> "8"
    
    2022-02-23 11:29:36.779 E/(BFragment.java:47)(onAttach): ---> "1"
    2022-02-23 11:29:36.780 E/(BFragment.java:53)(onCreate): ---> "2"
    2022-02-23 11:29:36.781 E/(BFragment.java:58)(onCreateView): ---> "3"
    2022-02-23 11:29:36.784 E/(BFragment.java:65)(onViewCreated): ---> "4"
    2022-02-23 11:29:36.800 E/(BFragment.java:71)(onActivityCreated): ---> "5"
    2022-02-23 11:29:36.801 E/(BFragment.java:77)(onViewStateRestored): ---> "6"
    2022-02-23 11:29:36.803 E/(BFragment.java:83)(onStart): ---> "7"
    
  2. 从A滑到BFragment(此时先创建C,再执行AB的生命周期)
    W/(CFragment.java:46)(onAttach): ---> "1"
    W/(CFragment.java:52)(onCreate): ---> "2"
    W/(CFragment.java:57)(onCreateView): ---> "3"
    W/(CFragment.java:64)(onViewCreated): ---> "4"
    W/(CFragment.java:70)(onActivityCreated): ---> "5"
    W/(CFragment.java:76)(onViewStateRestored): ---> "6"
    W/(CFragment.java:82)(onStart): ---> "7"
    
    A/(AFragment.java:101)(onPause): ---> "-1"
    
    E/(BFragment.java:89)(onResume): ---> "8"
    
  3. 在2的基础上(从B退出), 退出页面
    当前的Fragment会pause,其他的按照ABC顺序执行
    E/(BFragment.java:96)(onPause): ---> "-1"
    A/(AFragment.java:107)(onStop): ---> "-2"
    E/(BFragment.java:102)(onStop): ---> "-2"
    W/(CFragment.java:101)(onStop): ---> "-2"
    A/(AFragment.java:113)(onDestroyView): ---> "-3"
    A/(AFragment.java:119)(onDestroy): ---> "-4"
    A/(AFragment.java:125)(onDetach): ---> "-5"
    E/(BFragment.java:108)(onDestroyView): ---> "-3"
    E/(BFragment.java:114)(onDestroy): ---> "-4"
    E/(BFragment.java:120)(onDetach): ---> "-5"
    W/(CFragment.java:107)(onDestroyView): ---> "-3"
    W/(CFragment.java:113)(onDestroy): ---> "-4"
    W/(CFragment.java:119)(onDetach): ---> "-5"
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值