完成旧的活动,并开始一个新的,反之亦然

我知道,我得到了两个代码片段相同的结果

finish(); startActivity(newActivity); 

 startActivity(newActivity); finish(); 

我想知道你的意见,如果他们之间有很大的区别。 这个比那个好吗? 如果是这样,为什么?

当你做startActivity()时,所做的一切就是将你的意图发布到一系列事件中。 活动的实际开始在不久的将来会asynchronous发生。 所以我没有看到两者之间的巨大差异。

animation显然是不同的(至less在4.1以上)。 调用finish()首先开始淡化第一个活动,在新活动淡入之前,您可以简要地看到黑色背景。调用startActivity()首先淡入旧活动顶部的新活动,黑色背景不淡入可见。

我会做第二select,我没有支持任何从官方来源查询的东西,但是在调用完成之前启动新的活动更有意义,这样新的活动就会通过意图popup,现在的后台活动可以调用所有的清理方法。

如果你反其道而行,也许意图在清理完成之前不会有时间开火。 即将完成()调用后,活动调用startActivity()?

我希望你明白我想说的是什么,为了安全,我会做第二个select。

除了Emmanuels的回答:

两个方法startActivityfinish都将在调用方法结束进行调度,因为两者都由UI线程处理。

我有类似的问题:

 Activity A: singleInstance Activity B: singleInstance Activity C: singleInstance A starts BB starts C C wants to start A: 

这里如果我使用:

 finish(); startActivity(A); 

事情有线发生:活动B来到前景而不是A! 但是如果我改变这样的代码:

 startActivity(A); finish(); 

一切似乎都可以,活动A可见。

我不知道是什么问题,但是看起来在第一种情况下,C在执行startActivity命令之前已经完成了,所以后面的堆栈处理了情况并显示了它的最高活动,即B! 但在第二种情况下,一切正常发生。

我通常在finish() startActivity()之前做startActivity() ,因为我认为确保新的屏幕出来之前出来。

我在我的应用程序中有一个login页面。 用户login成功后,login活动消失,主要活动已启动。 它在Android 4中工作正常。

今天我想在材料devise中重写它。 但是,我遇到了一个很大的问题。 新的Android工作室创build空白的活动与我认为需要很多资源的材料devise。 同样的过程,但我得到了错误

 11-26 18:20:44.450 18397-18397/? I/Choreographer: Skipped 42 frames! The application may be doing too much work on its main thread. 11-26 18:20:44.485 18397-18408/? I/art: Background partial concurrent mark sweep GC freed 2864(191KB) AllocSpace objects, 4(43MB) LOS objects, 13% free, 100MB/116MB, paused 8.056ms total 39.767ms 

它说我的应用程序需要很多的资源,当mainActivity开始在我的手机logcat。 mainActivity没有任何内容,只是它是默认的Material Design布局。

我颠倒了顺序,现在它在我的手机上没有错误的工作。

第三种方法(如果你正在开始和停止相同的活动types):

为了避免任何可能的竞争条件和jankyanimation,请调用recreate()而不是使用您提供的任一选项。