为了账号安全,请及时绑定邮箱和手机立即绑定

Android活动生命周期-所有这些方法是为了什么?

Android活动生命周期-所有这些方法是为了什么?

慕标5832272 2019-06-01 14:16:50
Android活动生命周期-所有这些方法是为了什么?Android活动的生命周期是什么?为什么这么多类似的探测方法onCreate(), onStart(), onResume())在初始化期间调用,还有许多其他(onPause(), onStop(), onDestroy())在结尾打电话?何时调用这些方法,以及如何正确地使用这些方法?
查看完整描述

4 回答

?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

把它看进去活动生命周期(针对Android开发者)。


onCreate():

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

onRestart():

在活动停止后调用,然后再重新启动。总是后面跟着onStart()

onStart():

当活动对用户变得可见时调用。如果活动到达前台,则后面跟着onResume()。

onResume():

当活动开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入到它。总是跟在onPace()后面。

昂帕斯():

作为活动生命周期的一部分,当活动进入后台时调用,但尚未(尚未)终止。onResume()的对应项。当ActivityB在活动A前面启动时,将在A.B上调用此回调,直到A的onPace()返回时才会创建该回调,因此请确保这里不要做任何冗长的操作。

onStop():

当您不再对用户可见时调用。接下来您将接收onRestart()、onDesty()或Nothing,这取决于以后的用户活动。请注意,在内存不足的情况下,这个方法可能永远不会被调用,因为系统没有足够的内存来使您的活动的进程在其onPace()方法被调用之后继续运行。

onDesty():

在您的活动被破坏之前收到的最后一个电话。这可能是因为活动正在完成(有人在其上调用Finish(),或者因为系统正在临时销毁该活动的这个实例以节省空间。您可以使用isFinming()方法区分>这两种场景。

当活动第一次载荷这些活动的名称如下:

onCreate()onStart()onResume()

当你点击电话按钮活动将转到后台,以下事件称为:

onPause()onStop()

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

onRestart()onStart()onResume()

当您单击后按钮或者试图完成()这些活动的名称如下:

onPause()onStop()onDestroy()

活动国

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

这些州可分为以下三大类:

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

停顿-当设备进入睡眠状态,或者某个活动仍然可见,但被新的、非完全大小或透明的活动部分隐藏时,该活动被视为暂停。暂停的活动仍然存在,也就是说,它们维护所有的状态和成员信息,并保持与窗口管理器的连接。这被认为是Android活动堆栈中第二高优先级的活动,因此,只有在杀死该活动将满足保持活动/运行活动稳定和响应所需的资源需求时,操作系统才会终止该活动。

停住-被另一项活动完全掩盖的活动被视为停止或处于背景中。已停止的活动仍然试图尽可能长时间保留其状态和成员信息,但停止的活动被认为是三种状态中的最低优先级,因此OS将首先杀死该状态中的活动,以满足高优先级活动的资源需求。

*了解生命周期的样本活动*

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");
    }}


查看完整回答
反对 回复 2019-06-01
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

整个混乱是因为谷歌选择了非直观的名称,而不是如下所示:


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] 


查看完整回答
反对 回复 2019-06-01
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

活动有六种状态

  • 创造

  • 开始

  • 恢复

  • 停顿

  • 停住

  • 被毁

活动生命周期有七种方法

  • onCreate()

  • onStart()

  • onResume()

  • onPause()

  • onStop()

  • onRestart()

  • onDestroy()

activity life cycle

情况

  • 打开应用程序时

    onCreate() --> onStart() -->  onResume()
  • 当按下“后退”按钮并退出应用程序时

    onPaused() -- > onStop() --> onDestory()
  • 按家庭按钮时

    onPaused() --> onStop()
  • 按下主页按钮后,再次从最近的任务列表中打开应用程序或点击图标。

    onRestart() --> onStart() --> onResume()
  • 当从通知栏或打开设置打开另一个应用程序时

    onPaused() --> onStop()
  • 从另一个应用程序或设置中按下的“后退”按钮可以看到我们的应用程序。

    onRestart() --> onStart() --> onResume()
  • 当任何对话框在屏幕上打开时

    onPause()
  • 在关闭对话框或对话框中的后退按钮后

    onResume()
  • 任何手机都在响,用户在这个应用程序中。

    onPause() --> onResume()
  • 当用户按下电话的应答按钮时

    onPause()
  • 呼叫结束后

    onResume()
  • 当手机屏幕关闭时

    onPaused() --> onStop()
  • 当屏幕打开时

    onRestart() --> onStart() --> onResume()


查看完整回答
反对 回复 2019-06-01
  • 4 回答
  • 0 关注
  • 526 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信