Tim*_*ima 68 android android-activity
我知道,我在两个代码片段中都得到了相同的结果
finish();
startActivity(newActivity);
Run Code Online (Sandbox Code Playgroud)
和
startActivity(newActivity);
finish();
Run Code Online (Sandbox Code Playgroud)
如果他们之间存在很大差异,我想知道你的意见.这个比那个好吗?如果是这样,为什么?
Emm*_*uel 61
当你执行startActivity()时,所做的就是在事件队列中发布你的意图.活动的实际开始在不久的将来异步发生.所以我看不出两者之间有很大的不同.
Mon*_*eur 23
动画明显不同(至少从4.1开始).finish()先调用会开始逐渐淡出第一个活动,您可以在新活动淡入之前简单地看到黑色背景.调用startActivity()首先在旧活动的顶部淡化,黑色背景不可见.
Vit*_*nko 18
根据调用顺序和调用顺序,应用程序任务行为存在重要差异。startActivity()finish()
我所描述的案例仅适用于当前活动(被停止的活动)是任务中唯一的活动的情况。
通常,您会期望系统不会更改起始意图(您为启动另一个活动而创建的意图)。这是不是如果案件finish()被称为在最后调用之前的任务活动startActivity()。
在这种情况下,系统组件 ActivityManager 在执行startActivity() 添加 Intent.FLAG_ACTIVITY_NEW_TASK标志到您的意图时。
发生这种情况时,您可能会注意到 LogCat 中的日志条目类似于以下条目:
W/ActivityManager: startActivity 从完成 ActivityRecord{4a19b47 u0 com.foo.bar/com.foo.bar.SplashActivity t4928 f}; 强制 Intent.FLAG_ACTIVITY_NEW_TASK 用于: Intent { cmp=com.foo.bar/com.foo.bar.MainActivity }
这是(在某些情况下)事情可能出错的转折点。
总而言之,如果您想安全一点(而不是体验FLAG_ACTIVITY_NEW_TASK被添加到意图的意外副作用),那么顺序必须是:
startActivity()finish()演示项目。
屏幕录像:
我会做第二个选择,我不支持从官方来源查找的任何内容,但是,在调用完成之前启动新活动更有意义,通过意图弹出新活动,现在的后台活动可以调用所有清理方法.
如果你反过来这样做,也许意图在清理完成之前没有时间开火.即,活动会在finish()调用后调用startActivity()吗?
我希望你明白我要说的是什么,我会做第二个选择只是为了安全.
| 归档时间: |
|
| 查看次数: |
25996 次 |
| 最近记录: |