Android活动的生命周期是什么?为什么在初始化过程中调用这么多类似的方法(onCreate(), onStart(), onResume()),而在最后调用这么多其他方法(onPause(), onStop(), onDestroy()) ?

什么时候调用这些方法,应该如何正确地使用它们?


当前回答

在Activity Lifecycle (Android Developers)中可以看到。

onCreate ():

在活动第一次创建时调用。这就是你应该做的 所有常规的静态设置:创建视图,绑定数据到列表, 等。该方法还为您提供了一个包含 之前的冻结状态,如果有的话。总是跟着 通过onStart()。

onRestart ():

在您的活动停止后,在它开始之前调用 一次。后面总是跟着onStart()

onStart ():

当活动对用户可见时调用。紧随其后的是 onResume()如果活动来到前台。

onResume ():

当活动开始与用户交互时调用。在这 指向你的activity是在activity栈的顶部,与user 输入到它。后面总是跟着onPause()。

onPause ():

在活动运行时作为活动生命周期的一部分调用 进入背景, 但还没有被杀死。对应onResume()。 当活动B在活动A之前启动时,此回调将在活动A上调用。 在A的onPause()返回之前不会创建B,所以请确保不要这样做 在这里做任何长时间的事情。

原():

当用户不再可见时调用。下一个是你 接收onRestart(), onDestroy(),或什么都没有,取决于 以后的用户活动。 注意,在内存不足的情况下,这个方法可能永远不会被调用 系统没有足够的内存来保存您的活动 调用onPause()方法后运行的进程。

onDestroy ():

在您的活动被销毁之前,您收到的最后一个电话。这 都可能发生,因为活动正在结束(有人呼叫 Finish()处理它,或者因为系统正在暂时销毁它 活动实例以节省空间。您可以使用isFinishing()方法来区分这两种场景。

当Activity第一次加载事件时,调用如下:

onCreate()
onStart()
onResume()

当你点击电话按钮时,Activity将进入后台,下面的事件将被调用:

onPause()
onStop()

退出电话拨号器,下面的事件将被调用:

onRestart()
onStart()
onResume()

当你点击后退按钮或尝试完成()活动时,事件被调用如下:

onPause()
onStop()
onDestroy()

活动状态

Android操作系统使用优先级队列来帮助管理设备上运行的活动。基于特定的Android活动所处的状态,它将在操作系统中被分配特定的优先级。这个优先级系统帮助Android识别不再使用的活动,允许操作系统回收内存和资源。下图说明了一个活动在其生命周期内可以经历的状态:

这些状态可以分为以下三大类:

活动或正在运行——如果活动处于前台,也称为活动堆栈的顶部,则它们被认为是活动或正在运行。这被认为是Android activity堆栈中最高优先级的活动,因此只有在极端情况下才会被OS杀死,比如如果活动试图使用比设备上可用的内存更多的内存,因为这可能会导致UI变得无响应。

Paused - When the device goes to sleep, or an activity is still visible but partially hidden by a new, non-full-sized or transparent activity, the activity is considered paused. Paused activities are still alive, that is, they maintain all state and member information, and remain attached to the window manager. This is considered to be the second highest priority activity in the Android Activity stack and, as such, will only be killed by the OS if killing this activity will satisfy the resource requirements needed to keep the Active/Running Activity stable and responsive.

已停止——被另一个活动完全遮蔽的活动被认为已停止或处于后台。已停止的活动仍然试图尽可能长时间地保留其状态和成员信息,但已停止的活动被认为是三个状态中优先级最低的,因此,操作系统将首先终止处于该状态的活动,以满足更高优先级活动的资源需求。

*取样活动以了解生命周期**

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
    String tag = "LifeCycleEvents";
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       Log.d(tag, "In the onCreate() event");
    }
    public void onStart()
    {
       super.onStart();
       Log.d(tag, "In the onStart() event");
    }
    public void onRestart()
    {
       super.onRestart();
       Log.d(tag, "In the onRestart() event");
    }
    public void onResume()
    {
       super.onResume();
       Log.d(tag, "In the onResume() event");
    }
    public void onPause()
    {
       super.onPause();
       Log.d(tag, "In the onPause() event");
    }
    public void onStop()
    {
       super.onStop();
       Log.d(tag, "In the onStop() event");
    }
    public void onDestroy()
    {
       super.onDestroy();
       Log.d(tag, "In the onDestroy() event");
    }
}

其他回答

Android活动的生命周期是什么?

在android sdk框架中,每个android Activity(窗口)都有生命周期方法。这意味着,当用户进入一个应用程序,他可以看到在onCreate()生命周期方法中创建的活动。只在onCreate()方法中附加在窗口中的布局。

Activity(Window)有以下生命周期状态:

Create - Activity is created. 
Start - Current activity gets started.
Resume - Current activity has been in resumed state.
Restart - Current activity has been in restarted.
Pause - Current activity has been in Paused state.
Stop - Current activity has been in stopped state.
destroy - Current activity has been in destroyed state.

为什么有这么多听起来类似的方法(onCreate(), onStart(), onResume())在初始化期间调用,以及许多其他调用 (onPause(), onStop(), onDestroy())在结束时调用?

用户第一次进入应用程序:

当打开应用程序时,我们可以看到一个窗口(Activity)。onCreate (created) -> onStart(started) -> onResume(resume state)将被调用。

从后台关闭应用程序:

当从后台关闭应用程序时,必须销毁活动以释放一些内存。因此,onPause -> onStop -> onDestroy方法将被调用。

什么时候调用这些方法,应该如何正确地使用它们?

启动应用程序:

当用户第一次进入一个活动或应用程序时:

onCreate()

onStart() 

onResume()

当你从android studio运行应用程序:

onCreate()

onStart() 

onResume()

活动的转变:

当移动从第一活动->第二活动:

first_activity  : onPause()

second_activity : onCreate()

second_activity : onStart()

second_activity : onResume()

first_activity  : onStop()

当移动从第二个活动->第一个活动:

second_activity : onPause()

first_activity  : onRestart()

first_activity  : onStart()

first_activity  : onResume()

second_activity : onStop()

second_activity : onDestroy()

概述按钮:

当用户点击概述按钮(硬件第三个按钮-最近列表):

onPause()

onStop()

当用户关闭概览按钮(或)后,用户从最近的列表中进入其他应用程序,并返回到应用程序:

onRestart()

onStart()

onResume()

主页按钮:

当用户点击Home键时:

onPause()

onStop()

用户搜索主屏幕,点击应用程序图标回到活动:

onRestart()

onStart()

onResume()

用户收到电话:

当用户在一个活动,电话来了:

onPause()

onStop()

如果用户没有参加呼叫,它会自动断开并返回活动(未接呼叫):

onRestart()

onStart()

onResume()

如果用户不参加呼叫:

-不调用任何生命周期。

关机按钮:

当用户关闭按钮时:

onPause()

onStop()

解锁设备时:

onRestart()

onStart()

onResume()

弹出对话框:

当弹出对话框出现-没有生命周期将被调用

重启设备或关闭开关:

用户重启或关闭设备时:

onPause()

onStop()

当用户从主屏幕点击应用程序图标时:

onCreate()

onStart()

onResume()

在Android开发者页面,

onPause():

当系统即将开始恢复前一个活动时调用。 这通常用于将未保存的更改提交到持久数据, 停止动画和其他可能消耗CPU的东西,等等。 这个方法的实现必须非常快,因为接下来 直到此方法返回,活动才会恢复。紧随其后的是 onResume()如果活动返回到前面,或者 onStop()如果它对用户不可见。

原():

当活动对用户不再可见时调用,因为 另一项活动已经恢复,正在处理这一事件。这可能 发生的原因可能是一个新的活动正在启动,也可能是一个现有的活动 被带到这个面前,或者这个被摧毁。 如果此活动返回,则后面跟着onRestart() 与用户交互,或者onDestroy()如果这个活动消失。

现在假设有三个活动,你从A到B,然后onPause of A将被调用,现在从B到C,然后onPause of B和onStop of A将被调用。

暂停的活动得到恢复,停止的活动得到重新启动。

当你调用this.finish()时,onPause-onStop-onDestroy将被调用。需要记住的主要事情是:当Android需要内存用于其他操作时,暂停的活动将被停止,停止的活动将被销毁。

我希望这足够清楚了。

活动有六个状态

创建 开始 恢复 停顿了一下 停止 摧毁了

活动生命周期有七个方法

onCreate () onStart () onResume () onPause () 原() onRestart () onDestroy ()

图源

的情况下

When open the app onCreate() --> onStart() --> onResume() When back button pressed and exit the app onPaused() -- > onStop() --> onDestory() When home button pressed onPaused() --> onStop() After pressed home button when again open app from recent task list or clicked on icon onRestart() --> onStart() --> onResume() When open app another app from notification bar or open settings onPaused() --> onStop() Back button pressed from another app or settings then used can see our app onRestart() --> onStart() --> onResume() When any dialog open on screen onPause() After dismiss the dialog or back button from dialog onResume() Any phone is ringing and user in the app onPause() --> onResume() When user pressed phone's answer button onPause() After call end onResume() When phone screen off onPaused() --> onStop() When screen is turned back on onRestart() --> onStart() --> onResume()

I like this question and the answers to it, but so far there isn't coverage of less frequently used callbacks like onPostCreate() or onPostResume(). Steve Pomeroy has attempted a diagram including these and how they relate to Android's Fragment life cycle, at https://github.com/xxv/android-lifecycle. I revised Steve's large diagram to include only the Activity portion and formatted it for letter size one-page printout. I've posted it as a text PDF at https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf and below is its image:

我按照上面的答案运行一些日志,下面是输出:

开始活动

On Activity Load (First Time)
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

Reload After BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onCreate: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

OnMaximize(Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onRestart: 
D/IndividualChatActivity: onStart: 
D/IndividualChatActivity: onResume: 
D/IndividualChatActivity: onPostResume: 

停止活动

On BackPressed
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 
D/IndividualChatActivity: onDestroy: 

OnMinimize (Circle Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

OnMinimize (Square Button)
————————————————————————————————————————————————
D/IndividualChatActivity: onPause: 
D/IndividualChatActivity: onStop: 

Going To Another Activity
————————————————————————————————————————————————
D/IndividualChatActivity: onPause:
D/IndividualChatActivity: onStop: 

Close The App
————————————————————————————————————————————————
D/IndividualChatActivity: onDestroy: 

在我个人看来,onStart和onStop只需要两个。

onResume似乎在每一个实例回来,和onPause在每一个实例离开(除了关闭应用程序)。