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(已创建)-〉onStart(已启动)-〉onResume(恢复状态)将被调用。 Close the application from background: 当从后台关闭应用程序时,活动必须被销毁以释放一些内存。2因此,onPause-〉onStop-〉onDestroy方法将被调用。 何时调用这些方法,以及如何正确使用它们?
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");
}
}
9条答案
按热度按时间ozxc1zmp1#
活动有六种状态
活动生命周期有七种方法
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
diagram source
情况
*打开应用程序时
*按下后退按钮并退出应用程序时
*按下主页按钮时
*再次从最近任务列表打开应用程序或单击图标时按下主页按钮后
*打开应用程序时,通知栏中的另一个应用程序或打开设置
*从另一个应用程序或设置按下后退按钮,然后使用可以看到我们的应用程序
*屏幕上打开任何对话框时
*关闭对话框或按下对话框中的“后退”按钮后
*任何电话正在响铃且用户正在应用程序中
*当用户按下电话的应答按钮时
*通话结束后
*手机屏幕关闭时
*屏幕重新打开时
fivyi3re2#
整个混乱是由于谷歌选择了非直观的名称,而不是如下所示:
活动图可解释为:
pbwdgjma3#
安卓生命周期
有七种方法可以管理Android应用程序的生命周期:
*创建()时
*在开始()时
*关于简历()
*重新启动时()
*在暂停()时
*on停止()
*在销毁()时
回答所有这些方法的用途:
让我们举一个简单的场景,知道这些方法的调用顺序将帮助我们清楚地给予使用它们的原因。
一个月一次**-- -〉一个月一次*-- -〉**一个月二次
一米三氮一x**- - -〉**一米四氮一x
一个五分之一x**- - -〉一个六分之一x- - -〉**一个七分之一x
一米八氮一x**- - -〉**一米九氮一x
活动可能存在四种状态:
起始状态涉及:
创建一个新的Linux进程,为新的UI对象分配新的内存,并设置整个屏幕。
运行状态涉及:
它是当前屏幕上的活动(状态)。这个状态单独处理诸如在屏幕上打字、触摸和点击按钮等事情。
暂停状态涉及:
当Activity不在前台而是在后台时,则称该Activity处于暂停状态。
停止状态涉及:
停止的活动只能通过重新启动它才能进入前台,也可以在任何时间点销毁它。
活动管理器处理所有这些状态的方式使得用户体验和性能始终处于最佳状态,即使在将新活动添加到现有活动的场景中也是如此
bhmjp9jg4#
我喜欢这个问题及其答案,但是到目前为止,还没有介绍像*onPostCreate这样不常用的回调()*或*在“简历后”上()*. Steve Pomeroy试图绘制一个图表,其中包括这些内容以及它们与Android的Fragment生命周期的关系,我修改了Steve的大图,只包含Activity部分,并将其格式化为信纸大小的单页打印。我将其作为文本PDF发布在https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf,下面是其图像:
cs7cruho5#
从Android开发人员页面,
打开暂停():
当系统即将开始恢复前一个活动时调用。这通常用于提交对持久性数据的未保存更改、停止动画和其他可能消耗CPU的操作等。此方法的实现必须非常快,因为在此方法返回之前不会恢复下一个活动。后跟onResume()(如果Activity返回到前端)或onStop()(如果Activity对用户不可见)。
停止时():
当活动对用户不再可见时调用,因为另一个活动已恢复并覆盖此活动。这可能是因为正在启动新活动、将现有活动置于此活动之前或正在销毁此活动。如果此活动返回以与用户交互,则后跟onRestart(),如果此活动即将离开,则后跟onDestroy()。
现在,假设有三个“活动”,您从A转到B,则现在将从B到C调用A的onPause,然后将调用B的onPause和A的onStop。
暂停的“活动”将恢复,停止的“活动”将重新启动。
当你调用
this.finish()
时,onPause-onStop-onDestroy会被调用,主要要记住的是:只要Android需要内存执行其他操作,暂停的Activity就会停止,并且已停止的Activity会被销毁。希望你说得够清楚了。
cmssoen26#
Android Activity的生命周期是什么?
在Android SDK框架中,每个Android Activity(Window)都有生命周期方法。这意味着,当用户进入应用程序时,他可以看到在onCreate()生命周期方法中创建的Activity。布局仅在onCreate()方法中附加在窗口中。
活动(窗口)具有以下生命周期状态:
为什么在初始化过程中调用这么多类似的探测方法(onCreate()、onStart()、onResume()),而在最后调用这么多其他方法(onPause()、onStop()、onDestroy())?
第一个月
当打开应用程序时,我们可以看到一个窗口(Activity)。onCreate(已创建)-〉onStart(已启动)-〉onResume(恢复状态)将被调用。
Close the application from background:
当从后台关闭应用程序时,活动必须被销毁以释放一些内存。2因此,onPause-〉onStop-〉onDestroy方法将被调用。
何时调用这些方法,以及如何正确使用它们?
当用户第一次进入活动或应用程序时:
当您从Android Studio运行应用程序时:
从第一个活动移动到第二个活动时:
从第二个活动-〉第一个活动移动时:
当用户点击概述按钮(硬件第三个按钮-最近列表)时:
用户关闭"概述"按钮(或)后,用户从最近列表中转到一些其他应用程序,然后返回应用程序:
当用户点击主页按钮时:
用户搜索主屏幕并点击应用程序图标返回活动:
当用户在活动中时,电话呼叫出现:
如果用户不参加呼叫,它会自动断开连接并返回活动(未接电话):
N/A-不会调用生命周期。
用户关闭按钮电源时:
解锁设备时:
弹出对话框时-不会调用任何生命周期
当用户重启或关闭设备时:
当用户点击主屏幕上的应用程序图标时:
7gs2gvoe7#
在评分较高的答案上添加更多信息(添加了KILLABLE的附加部分和下一组方法,将在生命周期中调用这些方法):
来源:developer.android.com
请注意上表中的"Killable"列--对于那些标记为可终止的方法,在该方法返回后,系统可以随时终止托管活动的进程,而无需执行其另一行代码。
因此,应该使用
onPause()
方法写入任何持久性数据此外,在将Activity置于这样的后台状态之前,会调用方法onSaveInstanceState(Bundle)
,从而允许您将Activity中的任何动态示例状态保存到给定的Bundle
中,以便在需要重新创建Activity时在onCreate(Bundle)
中接收。请注意,将持久性数据保存在
onPause()
而不是onSaveInstanceState(Bundle)
中非常重要,因为后者不是生命周期回调的一部分,因此不会在其文档中描述的每种情况下都调用。我想再添加几个方法。这些方法没有列为生命周期方法,但它们将在生命周期中根据某些条件被调用。根据您的要求,您可能必须在应用程序中实现这些方法以正确处理状态。
当活动启动完成时调用(在调用
onStart()
和onRestoreInstanceState(Bundle)
之后)。当活动恢复完成时调用(在调用
onResume()
之后)。调用以在Activity被终止之前从Activity检索每个示例的状态,以便可以在
onCreate(Bundle)
或onRestoreInstanceState(Bundle)
中还原该状态(由此方法填充的Bundle将传递给这两个Activity)。在
onStart()
之后,当Activity从先前保存的状态(此处为savedInstanceState
)重新初始化时调用此方法。我的应用程序代码使用所有这些方法:
登录活动:
输出:(暂停前)
输出:(从暂停恢复后)
注意,即使
onPostResume()
没有被引用为生命周期方法,它也会被调用。yjghlzjz8#
我按照上面的答案运行了一些日志,下面是输出:
开始活动
停止活动
在我个人看来,只有两个是必需的onStart和onStop。
onResume似乎出现在每个取回的示例中,onPause出现在每个离开的示例中(除了关闭应用程序)。
xkrw2x1b9#
请参阅 * 活动生命周期 *(Android开发人员)。
在第一次创建Activity时调用。这是您应该执行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供一个Bundle,其中包含Activity之前冻结的状态(如果有)。始终后跟onStart()。
在Activity停止后、重新启动前调用。始终后跟onStart()
当Activity对用户可见时调用。如果Activity进入前台,则后跟onResume()。
当Activity将开始与用户交互时调用。此时,您的Activity位于Activity堆栈的顶部,用户输入将进入该Activity。始终后跟onPause()。
当Activity进入后台但尚未终止时,作为Activity生命周期的一部分调用。onResume()的对应函数。当Activity B在Activity A之前启动时,将在Activity A上调用此回调函数。在Activity A的onPause()返回之前,不会创建Activity B,因此请确保不要在此处执行任何冗长的操作。
当用户不再能看到你时调用。接下来你将收到onRestart()、onDestroy()或什么都不收到,具体取决于以后的用户活动。请注意,在内存不足的情况下,即在调用Activity的onPause()方法后,系统没有足够的内存来保持Activity的进程运行,可能永远不会调用此方法。
在Activity被销毁之前收到的最后一个调用。这可能是因为Activity正在完成(有人对它调用了finish()),也可能是因为系统暂时销毁了Activity的此示例以节省空间。您可以使用isFinishing()方法区分〉这两种情况。
"活动"首次加载时,事件调用如下:
当您单击"电话"按钮时,"活动"将转到后台,并调用以下事件:
单击后退按钮或尝试**finish()**活动时,事件调用如下:
Android操作系统使用优先级队列来帮助管理设备上运行的Activity。根据特定Android Activity所处的状态,将在操作系统中为其分配特定优先级。此优先级系统有助于Android识别不再使用的Activity,从而允许操作系统回收内存和资源。下图说明了Activity在其生存期内可以经历的状态:
这些状态可分为以下三大类: