在其 onCreate 方法中启动新活动后的先前活动状态?

Posted

技术标签:

【中文标题】在其 onCreate 方法中启动新活动后的先前活动状态?【英文标题】:previous activity state after launching new activity in its onCreate method? 【发布时间】:2018-02-22 00:34:18 【问题描述】:

谁能解释如果我执行此活动会发生什么? 我得到奇怪的输出并且应用程序挂起。

public class ComedyAct extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(new ProgressBar(this));

        startActivity(new Intent(this,secondact.class));

        Log.d("main","I am after start second act");
        int i=0;
        while(i<10000);

    

    @Override
    protected void onStart() 
        super.onStart();
        int i=0;
        while(i<10000);
        Log.d("main","I am in start first act");
    

    @Override
    protected void onStop() 
        super.onStop();
        int i=0;
        while(i<10000);
        Log.d("main","I am in stop first act");
    

【问题讨论】:

为什么不在 onCreate 中的while(i&lt;10000); 放置一个调试点并使用调试器找出发生了什么 @Raghunandan 我更感兴趣的是如果我编写这样的代码而不是仅仅输出会发生什么以及为什么会发生。 如果您使用调试器的助手进行调试,您应该弄清楚这一点 我可以,但基于此,我不能假设 android 系统如何根据输出处理活动。我需要一些关于..当我在活动的 oncreate 中启动活动时会发生什么,在先前活动的 oncreate 之后的 statemets 呢?如果它们可以执行(是),则意味着有两个线程(UI)呈现应用程序的 UI 或主要操作(一个在屏幕上绘制新动作,另一个在执行前一个动作)。怎么会这样?据我所知,只有一个 mainUIThread。 是的。您只有一个线程,即 ui 线程。除了使用调试器,您将自己弄清楚执行流程是什么 【参考方案1】:

我建议你阅读活动生命周期...

当您启动另一个活动时,ComedyAct 活动将处于停止状态,在这种情况下 onStart 将永远不会调用..

Activity生命周期为:

OnCreate---> OnStart--->OnResume

当另一个活动启动时 然后首先 onPause---->onStop--->onDestroy

第一个活动何时恢复?

首先onCreate---->--->onStart---->onResume,如果activity被销毁...

但是如果activity没有被销毁..那么首先onRestart--->onStart--->OnResume,在这种情况下永远不会调用onCreate...

【讨论】:

请运行代码和答案。因为它会给出意想不到的输出。解释输出。

以上是关于在其 onCreate 方法中启动新活动后的先前活动状态?的主要内容,如果未能解决你的问题,请参考以下文章

替换 SingleTask 活动中的片段

如何避免在启动 Activity 时调用 onCreate()?

调用finish()后活动布局闪烁

在列表视图上检查项目时启动新活动

如何在 mfc 的 OnCreate 方法中停止创建窗口

Android---Activity