Android中,activity生命周期是指啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中,activity生命周期是指啥?相关的知识,希望对你有一定的参考价值。

在Activity生命周期中,系统调用App生命周期中设置的回调方法,这些生命周期回调方法在第一层就像一个金字塔。活动生命周期的每个阶段都对应于金字塔的一个步骤。
当系统创建一个新的Activity实例时,回调方法从塔的底部一级一级地移动到塔的顶部。当它位于金字塔的顶部时,活动位于用户的前台,此时用户可以与活动进行交互。当用户想要离开活动时,系统调用另一系列方法将活动的状态从顶部移到底部。在某些情况下,Activity只完成部分状态迁移并等待用户的指令,然后返回到塔顶。
根据活动的复杂性,您可能不必实现所有的生命周期方法。但是,理解每个生命周期回调函数的含义非常重要,以确保您的应用程序按照用户的期望正确运行。
要正确实现生命周期的回调方法,从而使应用程序正确动作,需要注意以下几点:
确保用户使用你时,应用程序可以接听电话或切换到其他应用程序,而不会崩溃。确保您的应用程序在用户不使用时不会消耗系统资源。
确保用户在从其他应用程序切换回您的应用程序时可以继续他们以前的工作,并且在切换用户屏幕或其他操作时不会崩溃或丢失用户数据。
参考技术A

一个Android应用程序在运行时,对于底层的Linux Kernel而言都是一个单独的进程,但是对于Android系统而言,因为局限于手机画面的大小与使用的考虑,不能把每一个运行中的应用程序窗口都显示出来。

  所以通常手机系统的界面一次仅显示一个应用程序窗口,Android使用了Activity的概念来表示界面。

  运行中的应用程序分为五大类,分别是:

    前景模式:foreground process

    可见模式:visible process

    背景模式:background process

    空白模式:empty process

    服务模式:service process

  除了最后一个,貌似service process是Service的事情了。其他都与Activity相关。

Android系统会判断应用程序Activity是属于哪一个类,给予不同的Activity生命周期。      

Activity的生命周期也是它所在进程的生命周期。

Activity生命周期的运行如图:

Activity生命周期进程类型

  在Android系统中,即使不关掉程序,当应用程序处于某种进程类时,也有可能被系统kill掉。

Android系统通过运行机制,依照哪些画面或消息对使用者最重要以及当前内存使用状况,而做出是否kill Activity的决定。

foreground process(前景模式)是当前显示于手机屏幕上的应用程序画面,被定义为前景模式的进程,其中由onCreate()、onStart() 、onResume() 函数调用的Activity都会变成foreground process正在运行的Activity。

visible process(可见模式):visible process最常发生的情况是当应用程序弹出对话框要与用户交互时,原应用程序就会变成透明(不可见)的,而对话窗口就会变成前景。

  当对话窗口退出后,原应用程序马上就又变回原前景模式了。

  在Activity窗口画面变为透明时,就会由onPause()函数掌控进入暂停状态。

  当前景进程退出时,该Activity就会再度被拉到前景模式,由onResume() 函数唤醒。

background process是在Activity窗口画面被其他Activity完全盖掉,窗口画面已经完全看不见时,则会进入onStop()停止状态。

  这种情况通常发生在两个不同的应用程序开启时,后开启的应用程序会覆盖掉原应用程序。

  此时对background process Activity的处理有两种选择:一是直接被onDestroy()退出,该程序将完全关闭,无法再使用任何返回键回到该程序;另一个处理方式是当其他Activity需要内存时,这个background process会先被清除掉,释放出内存。

  如果使用者再度浏览刚刚被清除掉的background process,则Android系统会自动再运行onCreate()重新启动该Activity,所以当系统需要内存时,就会暂时将背景进程清除,让它变成empty process(空白模式) , 所以空白进程最重要的目的就是暂时释放出内存,直到使用者再度唤醒该empty process Activity时,才会将空白进程变成前景进程。

  (Service相关)service process(服务模式进程)是由startService()所产生的,虽然服务进程有点类似背景进程在背景状态运行,但是它的运行等级和前景进程几乎一样高。

  服务模式进程是持续运行的,虽然使用者看不到任何运行画面,Android系统不会自动关闭此类的服务进程,除非使用者自行关闭。这部分内容可在Service详解里面再讨论。

 

金字塔型的生命周期

 

Activity生命周期的每一个阶段都表示为金字塔上的一个台阶,当系统创建一个新的activity时,每一个回调函数都把activity的状态网上挪一步。

  金子塔的最顶层就是activity运行在前景模式下,用户可与之交互。

  当用户离开activity时,系统调用另一些回调函数,将activity的状态从金字塔中一步一步移下来。有些情况下,activity只移动一部分,并没有完全到底,这些情况下仍然可以移动回顶部。

  注意这些状态中只有三个状态是静态(static)的,意味着activity只有在这三个状态下能停留一段时间:

Resumed:foreground,用户可交互running state

Paused:部分被遮挡,不能接收用户输入也不能执行代码,另一个半透明或者小的activity正挡在前面。

Stopped:activity完全被遮挡,不能被用户看到,activity被认为在background,当Stopped的时候,activity实例的状态信息被保留,但是不能执行任何代码。

其他状态都是转换状态,系统会很快调用其他相应的回调函数离开这些状态。比如系统调用onCreate()之后,会很快调用onStart(),之后是 onResume()。

相信不少朋友也已经看了以上的分析之后,也基本了解了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。

 

有关于Activity的生命周期是Android中最基础和最重要的知识,如果你想系统的了解一下Activity的生命周期,推荐你可以去一个叫做秒秒学的教程网站上看看。

本回答被提问者和网友采纳
参考技术B

就是这张图,指的是activity的几个回调方法何时调用

Android中Activity的生命周期

protected void onCreate(Bundle savedInstanceState):当Activity的实例被启动是调用的第一个方法。

protected void onStart():该方法在onCreate()方法被调用,或者在Activity从Stop状态转为Actived的状态时调用。
protected void onResume():在Activity从Paused状态转到Actived状态时被调用。
protected void onPaused():在Activity从Actived状态转到Paused状态时被调用。
protected void onStop():在Activity从Actived状态转到Stopped状态时被调用。一般在这里保存Activity的状态信息。
protected void onDestroy():在Activity被结束时调用,它是结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。
 
启动应用调用信息如下:
  onCreate():
  onStart();
  onResume();
 
之后Activity界面在模拟器屏幕上,Activity从killed状态进入Actived状态。
点击返回按钮后:
  onPause();
  onStop();
  onDestory();
Activity进入了Killed状态。
重启当前andoird应用,点击Menu按钮:
  onPause():
  onStop():
可以看到受限执行onPause()方法,然后执行onStop()方法,根据上面关于生命周期的方法的说明,我们知道,此时Activity进入Stopped状态。
在模拟器屏幕上单击底部的Menu按钮,在应用列表中点击应用ActivityBasic,重新进入ActivityBasic:
  onStart():
  onResume():
也就是说,在Activity从Stopped状态转移到Actived状态,只需经过onStart()方法的onResume()方法。
 
在Android操作系统中,单击返回按钮和单击Menu按钮对Activity执行的是不同的操作,单击返回按钮使Activity退出,进入Killed状态,单击Menu按钮只是切换到Android的桌面,当前Activity由于完全被覆盖将进入Stopped状态。

以上是关于Android中,activity生命周期是指啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android 的生命周期

Android应用组件Activity

Android Activity生命周期解析

Activity 及其 Views 生命周期如何在 android 中重叠

Activity的生命周期

Android Activity的生命周期简单总结