Activity 生命周期

一个 Activity 在其生命周期中会经历多种状态。您可以使用一系列回调来处理状态之间的转换

onCreate()

您必须实现此回调,它会在系统创建您的 Activity 时触发。您的实现应该初始化 Activity 的基本组件:例如,您的应用应该在此处创建视图将数据绑定到列表。最重要的是,您必须在此处调用 setContentView() 来定义 Activity 界面的布局。

onCreate() 完成后,下一个回调将是 onStart()

onStart()

onCreate() 退出后,Activity 将进入“已启动”状态,并对用户可见。此回调包含 Activity 进入前台与用户进行互动之前的最后准备工作。

onResume()

系统会在 Activity 开始与用户互动之前调用此回调。此时,该 Activity 位于 Activity 堆栈的顶部,并会捕获所有用户输入。应用的大部分核心功能都是在 onResume() 方法中实现的。

onResume() 回调后面总是跟着 onPause() 回调。

onPause()

Activity 失去焦点进入“已暂停”状态时,系统就会调用 onPause()。例如,当用户点按“返回”或“最近使用的应用”按钮时,就会出现此状态。当系统为您的 Activity 调用 onPause() 时,从技术上来说,这意味着您的 Activity 仍然部分可见,但大多数情况下,这表明用户正在离开该 Activity,该 Activity 很快将进入“已停止”或“已恢复”状态。

如果用户希望界面继续更新,则处于“已暂停”状态的 Activity 也可以继续更新界面。例如,显示导航地图屏幕或播放媒体播放器的 Activity 就属于此类 Activity。即使此类 Activity 失去了焦点,用户仍希望其界面继续更新。

应使用 onPause() 来保存应用或用户数据、进行网络呼叫或执行数据库事务。

 

onPause() 执行完毕后,下一个回调为 onStop()onResume(),具体取决于 Activity 进入“已暂停”状态后发生的情况。

onStop()

当 Activity 对用户不再可见时,系统会调用 onStop()。出现这种情况的原因可能是 Activity 被销毁,新的 Activity 启动,或者现有的 Activity 正在进入“已恢复”状态并覆盖了已停止的 Activity。在所有这些情况下,停止的 Activity 都将完全不再可见。

系统调用的下一个回调将是 onRestart()(如果 Activity 重新与用户互动)或者 onDestroy()(如果 Activity 彻底终止)。

onRestart()

当处于“已停止”状态的 Activity 即将重启时,系统就会调用此回调。onRestart() 会从 Activity 停止时的状态恢复 Activity。

此回调后面总是跟着 onStart()

onDestroy()

系统会在销毁 Activity 之前调用此回调。

此回调是 Activity 接收的最后一个回调。通常,实现 onDestroy() 是为了确保在销毁 Activity 或包含该 Activity 的进程时释放该 Activity 的所有资源。

 

 

两分钟彻底让你明白Android Activity生命周期

两分钟彻底让你明白Android Activity生命周期

Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:

 public class Activity extends ApplicationContext {
        protected void onCreate(Bundle savedInstanceState);
        
        protected void onStart();   
        
        protected void onRestart();
        
        protected void onResume();
        
        protected void onPause();
        
        protected void onStop();
        
        protected void onDestroy();
    }

这里添加点打印的东西

public class ActivityDemo extends Activity {
   
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Log.e(TAG, "start onCreate~~~");
    }
    
    @Override
    protected void onStart() {
        super.onStart();
        Log.e(TAG, "start onStart~~~");
    }
    
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e(TAG, "start onRestart~~~");
    }
    
    @Override
    protected void onResume() {
        super.onResume();
        Log.e(TAG, "start onResume~~~");
    }
    
    @Override
    protected void onPause() {
        super.onPause();
        Log.e(TAG, "start onPause~~~");
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        Log.e(TAG, "start onStop~~~");
    }
    
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e(TAG, "start onDestroy~~~");
    }
    
}

我们打开应用时先后执行了onCreate()->onStart()->onResume三个方法

2021-02-18 19:40:55.214 14121-14121/com.zhang.zy_project E/ActivityDemo: start onCreate~~~

2021-02-18 19:40:55.228 14121-14121/com.zhang.zy_project E/ActivityDemo: start onStart~~~

2021-02-18 19:40:55.230 14121-14121/com.zhang.zy_project E/ActivityDemo: start onResume~~~

image.png

当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法

2021-02-18 19:42:17.142 14121-14121/com.zhang.zy_project E/ActivityDemo: start onPause ~  停顿

2021-02-18 19:42:18.084 14121-14121/com.zhang.zy_project E/ActivityDemo: start onStop~~~

2021-02-18 19:42:18.090 14121-14121/com.zhang.zy_project E/ActivityDemo: start onDestroy~~~

image.png

当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,Activity先后执行了onPause()->onStop()这两个方法

2021-02-18 19:43:50.263 14121-14121/com.zhang.zy_project E/ActivityDemo: start onPause ~  停顿

2021-02-18 19:43:51.393 14121-14121/com.zhang.zy_project E/ActivityDemo: start onStop~~~

image.png

而当我们再次启动ActivityDemo应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法

2021-02-18 19:44:32.899 14121-14121/com.zhang.zy_project E/ActivityDemo: start onRestart~~~

2021-02-18 19:44:32.922 14121-14121/com.zhang.zy_project E/ActivityDemo: start onStart~~~

2021-02-18 19:44:32.923 14121-14121/com.zhang.zy_project E/ActivityDemo: start onResume~~~

image.png

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值