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

Android 在以下情况下,在活动生命周期中调用哪些方法:,android,android-activity,lifecycle,Android,Android Activity,Lifecycle,假设我有一个Hello World单活动应用程序。我启动这个应用程序 在每种情况下调用哪些方法: 按下主页按钮:? 按下后退按钮:? 接到电话: 一旦用户通过应用程序图标再次启动应用程序,将调用哪些方法(假设操作系统没有“其他应用程序需要内存条件”): 按下主页按钮:? 按下后退按钮:? 接到电话: 谢谢大家 编辑:额外积分:用户如何调用onPause而不调用onStop?按home按钮和接收调用都不会从任务堆栈中删除活动,并且在您重新进入应用程序=>onPause()=>onStop(

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

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

  • 按下主页按钮:?
    按下后退按钮:?
    接到电话:
一旦用户通过应用程序图标再次启动应用程序,将调用哪些方法(假设操作系统没有“其他应用程序需要内存条件”):

  • 按下主页按钮:?
    按下后退按钮:?
    接到电话:
谢谢大家


编辑:额外积分:用户如何调用
onPause
而不调用
onStop

按home按钮和接收调用都不会从任务堆栈中删除活动,并且在您重新进入应用程序=>onPause()=>onStop()时可用

如图所示,重新输入应用程序调用=>onRestart()=>onStart()=>onResume()

相反,按下后退按钮将终止活动=>onPause()=>onStop()=>onDestroy()

在本例中,重新进入应用程序将调用classics=>onCreate()=>onStart()=>onResume()

编辑

如果某个活动已失去焦点,但 仍然可见(即,新的 非全尺寸或透明的活动 将注意力集中在你的活动之上),它 暂停。暂停的活动是 完全活着(它保持所有 国家和成员信息和 仍然附着在窗口上 经理),但可能会被 内存极低的系统 情况


好吧,虽然hello world程序可能会发生一系列事件,但同样的事件可能不会发生在视频游戏中,因为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并查看发生了什么事件。

有关了解活动生命周期的信息,请参见我创建的演示

我补充了不同的案例研究

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

}
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串TAG=“State changed”;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.i(标记“onCreate:”);
}
公共void OpenDialog(视图){
final AlertDialog AlertDialog=新建AlertDialog.Builder(MainActivity.this).create();//读取更新
alertDialog.setTitle(“hi”);
alertDialog.setMessage(“这是我的应用程序”);
alertDialog.setButton(“继续…”,新建DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog,int which){
//在这里可以添加函数
alertDialog.disclose();
}
});

alertDialog.show();//可能有几种情况

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

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

  • 当用户按下主页按钮时

    onPause()-->onStop()

  • 当用户从活动堆栈返回应用程序时

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

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

    onPause()-->onStop()

  • 当用户解锁手机时

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

  • 当用户在应用程序中接到来电时

    onPause()

  • 当用户在断开电话连接后返回应用时

    onResume()

  • 当用户从应用程序按下后退按钮时

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

  • 当用户按下“主页”按钮并从“活动堆栈”中滑动应用程序时。根据操作系统是否包含活动的上下文,可能调用或不调用onDestroy()方法取决于内存需求

  • 当某个活动位于顶部时,如果屏幕上没有完全显示该活动,则可能会触发onPause。无论如何,您可以尝试编写一个简单的示例,自己查看和测试生命周期……您可以使用我的问题和代码之一:浏览此官方文档,然后您将了解这些技巧。@ArpitPatel在打开或关闭对话框时不会对“活动生命周期”进行任何更改。@KumarMani是的,它会在onPaush()中进行活动说明何时打开一个对话框,您可以通过它进行检查。@ArpitPatel,刚才我已经检查了您提供的代码,它不会影响活动的生命周期。您能检查一下吗?是的,您是对的onPaush()没有使用AlertDialog.Builder调用,但是如果您当时使用的是对话框片段onPaush()打过电话,如果我错过了任何一个案子,请告诉我