完成旧的活动,并开始一个新的,反之亦然
我知道,我得到了两个代码片段相同的结果
finish(); startActivity(newActivity);
和
startActivity(newActivity); finish();
我想知道你的意见,如果他们之间有很大的区别。 这个比那个好吗? 如果是这样,为什么?
当你做startActivity()时,所做的一切就是将你的意图发布到一系列事件中。 活动的实际开始在不久的将来会asynchronous发生。 所以我没有看到两者之间的巨大差异。
animation显然是不同的(至less在4.1以上)。 调用finish()
首先开始淡化第一个活动,在新活动淡入之前,您可以简要地看到黑色背景。调用startActivity()
首先淡入旧活动顶部的新活动,黑色背景不淡入可见。
我会做第二select,我没有支持任何从官方来源查询的东西,但是在调用完成之前启动新的活动更有意义,这样新的活动就会通过意图popup,现在的后台活动可以调用所有的清理方法。
如果你反其道而行,也许意图在清理完成之前不会有时间开火。 即将完成()调用后,活动调用startActivity()?
我希望你明白我想说的是什么,为了安全,我会做第二个select。
除了Emmanuels的回答:
两个方法startActivity
和finish
都将在调用方法结束后进行调度,因为两者都由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()
而不是使用您提供的任一选项。
- 如何以编程方式获取Android导航栏的高度和宽度?
- 更新至ADT 23后无法findannotations.jar
- 在Android WebView中播放Youtube HTML5embedded式video
- appcompat-v7:21.0.0':找不到匹配给定名称的资源:attr'android:actionModeShareDrawable'
- 在没有将keystore信息放入build.gradle的情况下签名APK
- Android导出中止,因为致命的错误被发现
- embeddedZxing库而不使用条码扫描器应用程序
- testing应用内结算:“发布商无法购买此项目”
- 如何在两个小部件/布局之间添加新的“浮动操作按钮”