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

use*_*209 15 lifecycle android android-activity

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

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

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

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

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

谢谢大家.

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

big*_*nes 25

按下主页按钮和接听电话不会从任务堆栈中删除活动,并且在您重新进入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

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


Arp*_*tel 23

为了解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: ");
    }

}
Run Code Online (Sandbox Code Playgroud)

案例分析

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

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

我/州改变了:onCreate:

I/State改变了:onStart:

I/State改变了:onResume:

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

I/State改变了:onPause:

I/State已更改:onSaveInstanceState:

I/State改变了:onStop:

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

我/州改变了:onRestart:

I/State改变了:onStart:

I/State改变了:onResume:

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

I/State改变了:onPause:

I/State改变了:onStop:

I/State改变了:onDestroy:

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

I/State改变了:onPause:

I/State已更改:onSaveInstanceState:

I/State改变了:onStop:

I/State改变了:onDestroy:

我/州改变了:onCreate:

I/State改变了:onStart:

I/State已更改:onRestoreInstanceState:

I/State改变了:onResume:


小智 7

可能有几种情况

  1. 从应用程序图标打开应用程序。调用以下方法

    onCreate()-->onStart()-->onResume()

  2. 当用户按下主页按钮时

    onPause()-->onStop()

  3. 当用户从 Activity Stack 返回到应用程序时

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

  4. 当应用程序正在运行并且用户按下电源按钮时

    onPause()-->onStop()

  5. 当用户解锁手机时

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

  6. 当您在应用程序中时用户接到来电时

    暂停()

  7. 当用户挂断电话后返回应用程序时

    onResume()

  8. 当用户按下应用程序的后退按钮时

    onPause()-->onStop()-->onDestroy()

  9. 当用户按下主页按钮并从活动堆栈中用户滑动时,可能会或可能不会调用 app.onDestroy() 方法,具体取决于操作系统是否包含活动的上下文,取决于内存要求