在以下情况下,活动生命周期中调用了哪些方法:

假设我有一个Hello World单个Activity应用程序。 我启动这个应用程序。

在每种情况下调用哪些方法:

  • 按下主页按钮:?
    按下后退按钮:?
    收到电话:?

一旦用户通过应用程序图标再次启动应用程序,就会调用哪些方法(假设操作系统没有“其他应用程序需要内存条件”):

  • 按下主页按钮:?
    按下后退按钮:?
    收到电话:?

谢谢大家。

编辑:额外信用:用户如何在不调用onStop情况下调用onPause

Related of "在以下情况下,活动生命周期中调用了哪些方法:"

按下主页按钮和接听电话都不会从任务堆栈中删除活动,并且在您重新进入app => onPause()=> onStop()时可用。

如活动生命周期图所示,重新进入app calls => onRestart()=> onStart()=> onResume()

按后退按钮代替杀死activity => onPause()=> onStop()=> onDestroy()

在这种情况下重新进入应用程序调用classics => onCreate()=> onStart()=> onResume()

编辑

来自http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

如果活动失去焦点但仍然可见(即,新的非全尺寸或透明活动专注于您的活动),则会暂停活动。 暂停的活动完全处于活动状态(它维护所有状态和成员信息并保持附加到窗口管理器),但在极低内存情况下可能被系统杀死。

为了解ACTIVITY LIFECYCLE,我创建了演示。请参阅此处

我补充说,不同的案例研究。

MainActivity.java

  public class MainActivity extends AppCompatActivity { private static final String TAG = "State changed"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i(TAG, "onCreate: "); } public void OpenDialog(View view) { final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update alertDialog.setTitle("hi"); alertDialog.setMessage("this is my app"); alertDialog.setButton("Continue..", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { // here you can add functions alertDialog.dismiss(); } }); alertDialog.show(); //< -- Show dialog } @Override protected void onStart() { super.onStart(); Log.i(TAG, "onStart: " ); } @Override protected void onResume() { super.onResume(); Log.i(TAG, "onResume: "); } @Override protected void onPause() { super.onPause(); Log.i(TAG, "onPause: "); } @Override protected void onStop() { super.onStop(); Log.i(TAG, "onStop: "); } @Override protected void onRestart() { super.onRestart(); Log.i(TAG, "onRestart: "); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); Log.i(TAG, "onSaveInstanceState: "); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); Log.i(TAG, "onRestoreInstanceState: "); } @Override protected void onDestroy() { super.onDestroy(); Log.i(TAG, "onDestroy: "); } @Override public void onBackPressed() { super.onBackPressed(); Log.i(TAG, "onBackPressed: "); } } 

案例分析

案例1 =首先单击应用程序图标

注意:这里没有显示onRestoreInstanceState,因为它在运行时执行

我/州改变了:onCreate:

我/州改变了:onStart:

I / State改变了:onResume:

案例2 =单击主页按钮(当屏幕关闭或来电时相同)

我/州改变了:onPause:

I / State已更改:onSaveInstanceState:

I / State改变了:onStop:

案例3 =(案例2继续)通过最近打开应用程序

我/州改变了:onRestart:

我/州改变了:onStart:

I / State改变了:onResume:

案例4 =单击“返回”按钮(onBackPressed方法调用)

我/州改变了:onPause:

I / State改变了:onStop:

I / State改变了:onDestroy:

案例5 =迁移变更(旋转屏幕)

我/州改变了:onPause:

I / State已更改:onSaveInstanceState:

I / State改变了:onStop:

I / State改变了:onDestroy:

我/州改变了:onCreate:

我/州改变了:onStart:

I / State已更改:onRestoreInstanceState:

I / State改变了:onResume:

好吧,虽然您的hello world程序可能会发生一系列事件,但在video游戏中可能不会出现相同的序列,因为Android可能会因占用太多资源而销毁它。

我发现看到我的应用程序的生命周期的最好方法是覆盖所有方法(onStart,onRestart,…,包括onSaveInstance和onRestoreInstance)并在每个方法中插入日志语句。 像这样:

 @Override public void onDestroy() { // Call the super class super.onDestroy(); // Log the action Log.d("Debug", "onDestroy() has been called!"); } 

现在我可以去logcat看看发生了什么事。