这些方法是什么?
Android活动的生命周期是什么? 为什么在初始化过程中调用了很多类似的声音方法( onCreate()
, onStart()
, onResume()
),以及在末尾调用了很多其他声音方法( onPause()
, onStop()
, onDestroy()
)?
何时调用这些方法,以及如何正确使用它们?
在Activity Lifecycle(在Android开发人员处)中查看它。
onCreate() :
在第一次创建活动时调用。 这是您应该完成所有常规静态设置的位置:创建视图,将数据绑定到列表等。此方法还会为您提供一个包含活动先前冻结状态(如果有的话)的Bundle。 总是跟着onStart()。
onRestart() :
在您的活动停止后调用,然后再次启动。 总是跟着onStart()
onStart() :
当活动对用户变得可见时调用。 如果活动进入前台,则跟随onResume(),如果隐藏,则执行onStop()。
onResume() :
当活动开始与用户交互时调用。 此时,您的活动位于活动堆栈的顶部,用户输入即可。 总是跟着onPause()。
onPause():
作为活动生命周期的一部分,当活动进入后台但尚未(尚未)死亡时调用。 与onResume()的对应部分。 当活动B在活动A前面启动时,此回调将在A上被调用。在A的onPause()返回之前,B不会被创建,所以一定不要在这里做任何冗长的事情。
onStop() :
当用户不再可见时调用。 接下来您将接收onRestart(),onDestroy()或任何内容,具体取决于以后的用户活动。
请注意,在内存不足的情况下,可能永远不会调用此方法,因为系统没有足够的内存来保存活动进程在调用onPause()方法后运行。
onDestroy() :
在您的活动被破坏前您收到的最终电话。 这可能是因为活动正在完成(某人称为finish(),或者系统暂时销毁此活动的实例以节省空间,您可以使用isFinishing()方法区分这两种情况。
当活动第一次加载时 ,事件被调用如下:
onCreate()
onStart()
onResume()
当你点击电话按钮时 ,活动进入后台,并调用以下事件:
onPause()
onStop()
退出电话拨号程序 ,将会调用以下事件:
onRestart()
onStart()
onResume()
当您单击后退按钮或尝试完成()时 ,活动的调用如下所示:
onPause()
onStop()
onDestroy()
活动状态
Android OS使用优先级队列来帮助管理在设备上运行的活动。 根据特定Android活动的状态,它将在操作系统内被分配一定的优先级。 此优先系统可帮助Android识别不再使用的活动,从而使操作系统能够回收内存和资源。 下图说明了活动在其整个生命周期中可以经历的状态:
这些国家可以分为三大类:
活动或正在运行 - 如果活动处于前台,活动被视为活动或正在运行,也称为活动堆栈的顶部。 这被认为是Android Activity堆栈中最高优先级的活动,因此只会在极端情况下被操作系统杀死,比如活动尝试使用比设备上可用内存更多的内存,因为这可能会导致UI变得没有反应。
已暂停 - 当设备进入睡眠状态,或活动仍然可见但部分被新的非全尺寸或透明活动隐藏时,该活动被视为暂停。 暂停的活动仍然存在,也就是说,它们保留所有州和会员信息,并保持与窗口管理器相关联。 这被认为是Android 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");
}
}
由于谷歌选择非直觉名称而不是如下所示,导致整个混淆:
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]
活动图可以被解释为:
活动有六个州
活动生命周期有七种方法
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()
上一篇: what are all these methods for?
下一篇: What is the main purpose of setTag() getTag() methods of View?