Android Activity 生命周期——这些方法有什么用?

新手上路,请多包涵

Android Activity 的生命周期是什么? Why are so many similar sounding methods ( onCreate() , onStart() , onResume() ) called during initialization, and so many others ( onPause() , onStop() , onDestroy() ) 最后调用?

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

原文由 Nav 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
2 个回答

Activity Lifecycle (在 Android Developers)中查看它。

在此处输入图像描述

onCreate()

在第一次创建活动时调用。这是您应该进行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供一个 Bundle,其中包含 Activity 的先前冻结状态(如果有的话)。始终跟随 onStart()。

重启()

在您的 Activity 停止后,在它再次启动之前调用。始终跟随 onStart()

开始()

当活动对用户可见时调用。如果活动出现在前台,则后跟 onResume()。

onResume() :

当活动将开始与用户交互时调用。此时您的活动位于活动堆栈的顶部,用户输入将进入它。始终跟随 onPause()。

暂停()

当活动进入后台但尚未(尚未)被终止时,作为活动生命周期的一部分调用。 onResume() 的对应项。当活动 B 在活动 A 之前启动时,将在 A 上调用此回调。在 A 的 onPause() 返回之前不会创建 B,因此请确保不要在此处做任何冗长的事情。

停止()

当您不再对用户可见时调用。接下来您将收到 onRestart()、onDestroy() 或什么都没有,具体取决于以后的用户活动。请注意,在调用 onPause() 方法后系统没有足够的内存来保持 Activity 进程运行的低内存情况下,可能永远不会调用此方法。

onDestroy() :

在您的活动被销毁之前您收到的最后一个电话。这可能是因为 Activity 正在完成(有人对其调用了 finish() ,或者因为系统正在临时销毁 Activity 的这个实例以节省空间。您可以使用 isFinishing() 方法区分>这两种情况。

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

 onCreate()
onStart()
onResume()

当您 点击电话按钮 时,活动进入后台并调用以下事件:

 onPause()
onStop()

退出电话拨号程序,将调用以下事件:

 onRestart()
onStart()
onResume()

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

 onPause()
onStop()
onDestroy()


活动状态

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

这些状态可以分为以下三个主要组:

活动或运行- 如果活动位于前台,也称为活动堆栈的顶部,则活动被视为活动或正在运行。这被认为是 Android Activity 堆栈中优先级最高的 Activity,因此只会在极端情况下被操作系统终止,例如如果 Activity 试图使用比设备上可用的内存更多的内存,因为这可能会导致 UI变得反应迟钝。

已暂停- 当设备进入睡眠状态,或活动仍然可见但被新的、非全尺寸或透明活动部分隐藏时,该活动被视为已暂停。暂停的活动仍然存在,也就是说,它们保留所有状态和成员信息,并保持与窗口管理器的关联。这被认为是 Android Activity 堆栈中优先级第二高的 Activity,因此,只有在终止此 Activity 将满足保持 Active/Running Activity 稳定和响应所需的资源要求时,才会被操作系统终止。

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

*示例活动以了解生命周期**

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

原文由 Yaqub Ahmad 发布,翻译遵循 CC BY-SA 4.0 许可协议

活动有六个状态

  • 已创建
  • 开始
  • 已恢复
  • 暂停
  • 停止
  • 销毁

Activity 生命周期 有七个方法

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

活动生命周期

图源

情况

  • 打开应用程序时
   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()

原文由 Arun Kumar 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题