启动New Activity多次生命周期的误解

时间:2011-10-14 11:03:34

标签: android android-activity lifecycle android-intent

在活动A的创建中

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

在oncreate内的活动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方法我想要实际启动新活动。因为活动B实际上只能活动一小段时间而不是完成。我的问题在于理解活动生命周期。我期望当我调用srartActivity时,确实要启动活动,但它不会发生。

EDIT1: 好吧,我只粘贴了一小段我的代码。并且问题不在while循环中,在我的实际项目中正确编写了i变量的初始化,如int i-0;像i ++一样在循环内递增; 。 。 。正如您所看到的,应用程序的输出是好的,所有内容都会以sertian次数调用,依此类推,但问题在于调用的顺序。就像startActivity在调用srartActivity之后没有启动活动一样,而是在activityA的oncreate完成之后启动所有事情。

1 个答案:

答案 0 :(得分:3)

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

如果您希望活动A在活动B完成之前延迟,您可以拨打startActivityForResult - 一次!然后,在Activity B中,调用finish(int)将结果返回给Activity A.在Activity A中覆盖onActivityResult以获取结果代码,如果需要,可以从此处再次启动Acitity B.

另见Starting Activities and Getting Results