gpt4 book ai didi

android - startNewActivity 多次生命周期错过理解

转载 作者:行者123 更新时间:2023-11-29 18:16:37 26 4
gpt4 key购买 nike

在 Activity A的oncreate中

while(i<5){
startActivity(new Intent(this, ActivityB.class));
Log.v(tag,"activity A");
}

在 oncreate 中的 Activity B 中

Log.v(tag,"activity B");
finish();

然后在控制台中我看到了这样的东西

activity A
activity A
activity A
activity A
activity A
activity B
activity B
activity B
activity B
activity B

我应该改变什么才能输出这样的情况

activity A
activity B
activity A
activity B
activity A
activity B

我的意思是对于每个 startActivity 方法,我都希望新 Activity 真正开始。因为 Activity B 实际上只存在一小部分开始和结束的时间。我的问题在于理解 Activity 生命周期。我预计当我调用 srartActivity 时, Activity 确实会开始,但它并没有发生。

编辑1:好的,我只粘贴了一小段代码。问题不在 while 循环中,在我的真实项目中,正确编写了 i 变量的初始化,如 int i-0;并像 i++ 一样在循环内递增; . . .如您所见,应用程序的输出很好,所有内容都被调用了一定次数等等,但问题在于调用顺序。就好像在srartActivity调用之后startActivity并没有启动activity,而是在activityA的oncreate完成之后才开始一切。

最佳答案

这不仅与 Activity 生命周期有关,还与应用主线程(=UI 线程)中的消息处理有关。startActivity 在发送 Intent 后立即返回,因此 while 循环会在很短的时间内触发 5 个 Intent 来启动 Activity B,然后将控制权返回给线程的消息循环。只有从当前方法调用返回后,您的应用程序主线程才能开始处理先前生成的消息,这将导致创建 Acitvity 5 的 5 个实例,一个接一个。

如果您希望 Activity A 推迟到 Activity B 完成,您可以调用 startActivityForResult - 一次!。然后,在 Activity B 中,调用 finish(int) 将结果返回给 Activity A。覆盖 onActivityResult在 Activity A 中获取结果代码,如果需要,您可以从这里再次启动 Acitity B。

另见 Starting Activities and Getting Results

关于android - startNewActivity 多次生命周期错过理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766700/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com