问答中心分类: ANDROIDAndroid活动生命周期——所有这些方法都是为了什么?
0
匿名用户 提问 1天 前

Android活动的生命周期是什么?为什么有这么多相似的探测方法(onCreate(),onStart(),onResume())在初始化期间调用,以及其他许多调用(onPause(),onStop(),onDestroy())最后打电话来了?
何时调用这些方法,如何正确使用它们?

Alexander Kulyakhtin 回复 1天 前

为什么这个问题被多次投票?为什么它没有被关闭?

Alexander Kulyakhtin 回复 1天 前

为什么要用大量选票来结束一个问题?Stackoverflow有一个坏习惯。

Alexander Kulyakhtin 回复 1天 前

这是一个维基风格的问题,我觉得应该允许在网站上使用。

Alexander Kulyakhtin 回复 1天 前

@Alexander Kulyakhtin——为什么要结束这个问题?相反,如果你不能消化答案中为新安卓用户提供的信息,你应该关闭你的帐户。这个问题充满了知识,我将对这个问题进行投票。

Alexander Kulyakhtin 回复 1天 前

因为这些方法什么时候被称为问题,你尝试过什么?

Alexander Kulyakhtin 回复 1天 前

评论:为什么这个问题被多次投票?我:向上投票的收益

9 Answers
0
Yaqub Ahmad 回答 1天 前

从中看到它活动生命周期(在Android开发者中)。
在此处输入图像描述
onCreate():

在首次创建活动时调用。这是你应该做的

onRestart():

在活动停止后、开始之前调用

onStart():

当活动对用户可见时调用。然后

onResume():

当活动将开始与用户交互时调用。看这个

暂停():

在活动进行时作为活动生命周期的一部分调用

onStop():

当用户不再可见时调用。你下一个

onDestroy():

在你的活动被破坏之前,你收到的最后一个电话。这

活动什么时候开始首次加载这些活动的名称如下:

onCreate()
onStart()
onResume()

当你点击电话按钮活动进入后台,以下事件被称为:

onPause()
onStop()

退出电话拨号程序以下活动将被称为:

onRestart()
onStart()
onResume()

当你点击后退按钮或者试着完成这些活动的名称如下:

onPause()
onStop()
onDestroy()

活动状态
Android操作系统使用优先级队列来帮助管理设备上运行的活动。根据特定Android活动所处的状态,它将在操作系统中被分配一定的优先级。这个优先级系统帮助Android识别不再使用的活动,允许操作系统回收内存和资源。下图说明了活动在其生命周期内可以经历的状态:
这些状态可分为以下三大类:
活跃的或奔跑的-如果活动位于前台(也称为活动堆栈顶部),则它们被视为活动或正在运行。这被认为是Android活动堆栈中优先级最高的活动,因此只有在极端情况下,操作系统才会终止该活动,例如,如果该活动试图使用比设备上可用的内存更多的内存,因为这可能会导致UI无响应。
停顿-当设备进入睡眠状态,或者某个活动仍然可见,但被新的、非完整大小的或透明的活动部分隐藏时,该活动被视为暂停。暂停的活动仍处于活动状态,也就是说,它们维护所有状态和成员信息,并保持与窗口管理器的连接。这被认为是Android活动堆栈中优先级第二高的活动,因此,只有在终止该活动满足保持活动/运行活动稳定和响应所需的资源需求时,操作系统才会终止该活动。
停止-被其他活动完全遮挡的活动被视为已停止或处于背景中。已停止的活动仍会尽可能长时间地保留其状态和成员信息,但已停止的活动被视为三个状态中优先级最低的,因此,操作系统将首先终止该状态中的活动,以满足更高优先级活动的资源需求。
*了解生命周期的示例活动**

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");
    }
}
Titouan de Bailleul 回复 1天 前

如果我理解正确,onStop()总是在onPause()之后调用吗?

Yaqub Ahmad 回复 1天 前

不总是,“onStop():当用户不再可见时调用”

NodeDad 回复 1天 前

在onCreate之前是否有任何可能被调用的内容?

Mjoellnir 回复 1天 前

是的,有-默认构造函数(即没有参数的构造函数)。但对于非常基本的初始化目的,它的用途非常有限。通常你应该使用它,除非你真的知道自己在做什么。即使这样,如果有更好的方法,你也应该三思而后行。

Kaveesh Kanwal 回复 1天 前

如何在活动中直接从onResume()转到onPause()?

San 回复 1天 前

对于活动生命周期的解释,这是迄今为止最好且完整的答案。

Ashish Kumar Mishra 回复 1天 前

我认为这个链接可以帮助你们更好地理解活动的生命周期。iPhone技术。com/理解android活动中的生命周期

0
Arun Kumar 回答 1天 前

活动有六种状态

  • 创建
  • 起动
  • 继续
  • 停顿
  • 停止
  • 摧毁

活动生命周期有七种方法

  • onCreate()
  • onStart()
  • onResume()
  • onPause()
  • onStop()
  • onRestart()
  • onDestroy()

活动生命周期
情况

  • 什么时候打开应用程序
    onCreate() --> onStart() -->  onResume()
  • 当按下后退按钮并退出应用程序时
    onPaused() -- > onStop() --> onDestory()
  • 当按下home(主页)按钮时
    onPaused() --> onStop()
  • 当再次从最近的任务列表中打开应用程序或单击图标时,按下主页按钮
    onRestart() --> onStart() --> onResume()
  • 当从通知栏打开另一个应用程序或打开设置时
    onPaused() --> onStop()
  • 从另一个应用程序或使用的设置中按下后退按钮可以查看我们的应用程序
    onRestart() --> onStart() --> onResume()
  • 当屏幕上打开任何对话框时
    onPause()
  • 关闭对话框或从对话框返回按钮后
    onResume()
  • 任何手机正在响,应用程序中的用户
    onPause() --> onResume()
  • 当用户按下手机的应答按钮时
    onPause()
  • 通话结束后
    onResume()
  • 当手机屏幕关闭时
    onPaused() --> onStop()
  • 当屏幕重新打开时
    onRestart() --> onStart() --> onResume()
gaurav jain 回复 1天 前

“当屏幕上打开任何对话框时,调用onPause()”,对于alertdialog不成立。只有当对话框本身是一个对话框活动(主题设置为@android:style/theme.dialog)时,才会调用它。

likejudo 回复 1天 前

有价值的回答。一定要把这个提交给谷歌,添加到他们的文档中。我正在将您的答案保存到Word文档中以备保存!

Sotti 回复 1天 前

我不理解“任何电话正在响,应用程序中的用户”。具体情况是什么?我的第一个想法是,如果用户在应用程序中,手机开始响,那么就会启动暂停()–>onStop(),以防全屏显示通话。对于提示,来电信息可能只是OnResume–>onPause(),但我不确定这一点。呼叫onPause–>onResume时的情况是什么?是在电话的最后吗?

Heisenberg 回复 1天 前

这就是我要找的。我只是想知道我应该把api调用放在哪里。

Ayub 回复 1天 前

我喜欢你的基于场景的答复

0
Nilesh Pawar 回答 1天 前

整个混乱都是因为谷歌选择了非直觉的名称,而不是以下内容:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change]

活动图可以解释为:
在此处输入图像描述

Nilesh Pawar 回复 1天 前

视情况而定。除非它能解决困惑,否则长名字没什么坏处。onRoutePresentationDisplayChanged()在很大程度上是Android SDK内部的一个函数

Daniel 回复 1天 前

如果我们必须经常输入这些方法名,那么来自SDK的方法名在长度和足够的描述性之间有很好的平衡。然而,IDE有覆盖这些东西的快捷方式,我们真的不需要到处调用它们,因此,像这些这样更长的描述性名称会很好地工作。不过,对于初学者来说,这是一个更大的问题。

Martin Marconcini 回复 1天 前

我个人并不觉得你的名字更直观,加上片段,它实际上并不相关。

Nilesh Pawar 回复 1天 前

再一次,这是个人观点。当我向人们解释这些函数时,我会让他们总结一下google SDK中记录的函数的含义。人们想出了我建议的名字的近似变体。

Nilesh Pawar 回复 1天 前

例如:onStart():当活动对用户可见时调用。如果活动出现在前台,则后跟onResume(),如果活动被隐藏,则后跟onStop()。这不是onVisible()的自然候选吗?

bad_keypoints 回复 1天 前

投了赞成票。比官方文件更有帮助

Shridutt Kothari 回复 1天 前

+1.修改官方形象的额外努力。做得好比官方文件更有帮助,谢谢!

Andrew S 回复 1天 前

这是一个很棒的帖子。一个问题。当你在google中输入Andoid Lifecycle methods时,这张图片会出现在搜索选项上方(甚至在图片搜索模式下都不会出现),作为Android生命周期方法的答案。不知道的人(或懒惰的人,取决于你如何看待它)可能很容易被误导,除非他们遵循StackOverflow链接,而不是点击流程图图像(你的图像)。

Nilesh Pawar 回复 1天 前

哦没想到!谷歌似乎喜欢这张图片中的名字:D

anotherDev 回复 1天 前

对这就是我一直在寻找的。应该有人写一本书(或一个医生?)像这样的东西。简历等都没有意义。

DragonFire 回复 1天 前

应该只有两个onStart和onStop,到此为止。。不需要这些层(我知道它们是用于内存管理->但它们造成的麻烦多于帮助)

0
Devrath 回答 1天 前

ANDROID生命周期
有七种方法可以管理Android应用程序的生命周期:

回答这些方法的用途是什么:
让我们以一个简单的场景为例,了解这些方法的调用顺序将有助于我们明确使用它们的原因。

  • 假设你正在使用计算器应用程序。调用了三种方法

onCreate() – – – > onStart() – – – > onResume()

  • 当我使用计算器应用程序时,突然一个电话打过来。

onPause() – – – > onStop()

  • 现在,假设我在电话和计算器上完成对话

onRestart() – – – > onStart() – – – > onResume()

  • 最后,假设我已经完成了计算器应用程序中的所有任务

onStop() – – – > onDestroy()

一项活动可能存在四种状态:

  • 起始状态
  • 运行状态
  • 暂停状态
  • 停止状态

起始状态包括:
创建一个新的Linux进程,为新的UI对象分配新内存,并设置整个屏幕。所以大部分工作都在这里。
运行状态包括:
它是当前屏幕上的活动(状态)。仅此状态就可以处理诸如在屏幕上键入、触摸和单击按钮之类的事情。
暂停状态包括:
当一个活动不在前台,而是在后台时,则称该活动处于暂停状态。
停止状态包括:
一个已停止的活动只能通过重新启动才能进入前台,也可以在任何时间点将其销毁。
activity manager以这样一种方式处理所有这些状态:即使在将新活动添加到现有活动的场景中,用户体验和性能也始终处于最佳状态

zeeali 回复 1天 前

有什么例子吗暂停重新开始?

0
CODE-REaD 回答 1天 前

我喜欢这个问题和它的答案,但到目前为止,还没有报道像这样使用频率较低的回调onPostCreate()onPostResume()史蒂夫·波默罗伊(Steve Pomeroy)试图绘制一张图表,其中包括这些,以及它们与安卓系统的关系碎片生命周期https://github.com/xxv/android-lifecycle.我修改了史蒂夫的大图,只包括活动部分,并将其格式化为一页大小的打印输出。我把它作为文本PDF发布在https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf下面是它的图像:
Android活动生命周期