【问题标题】:Does it matter in what order I call finish() and startActivity()? [duplicate]我调用finish()和startActivity()的顺序是否重要? [复制]
【发布时间】:2015-10-20 09:23:38
【问题描述】:

第一种方法

Intent in = new Intent(VerificationActivity.this, VerifyCode.class);
in.putExtra("verificationCode", verificationCode);
finish();
startActivity(in);

第二种方式...

Intent in = new Intent(VerificationActivity.this, VerifyCode.class);
in.putExtra("verificationCode", verificationCode);
startActivity(in);
finish();

哪种方法更好?有什么区别吗?

【问题讨论】:

  • 我检查了...... thnks.....再告诉一件事性能不同或两者相同......
  • 如果你按照你说的检查过,你早就知道了。不,没关系
  • 好的....实际上我想在系统调用级别更深入地了解......但我读到它在两种情况下都不会影响性能......但两种方法的处理方式是不同的......就像您评论链接link的答案是“当您执行startActivity()时,所做的只是将您的意图发布到事件队列中。活动的实际开始在附近异步发生未来。” 意味着性能很重要
  • 在这个影响很小的调用顺序中没有性能无关紧要,除非它给你带来问题,否则不要担心。 过早的优化是万恶之源

标签: android performance android-activity


【解决方案1】:

不管你用哪种方式调用它们,startActivity() 和 finish() 都不会立即发生。除非您调用 return,否则您的方法将始终在关闭之前完成其块中的所有代码。

【讨论】:

  • 它是否记录在任何地方?
  • 我目前找不到具体信息。但是如果代码块仍在运行,则不会关闭实例。如果您需要检查是否已执行某些操作,请在 onDestroy() 中添加逻辑,以查看您关注的内容是否已确定已执行。调用 finish() 只是告诉您的 Activity 在准备好并清理完毕后完成。
【解决方案2】:

finish() call 调用onStop() 当前活动,startActivity(i) 将新的intent i 移动到事件队列。并且活动在从事件队列中取出时启动。在前者中,如果事件队列停止,您将看到当前活动消失,并且在一段时间后,当意图轮到它时.. 活动会突然出现。但由于 Android 的调度,这几乎不会发生。

【讨论】:

  • finish() 是否有可能在startActivity(in); 发生之前导致当前活动实例的破坏?
猜你喜欢
  • 2019-06-19
  • 2013-10-21
  • 2014-12-20
  • 2012-07-02
  • 2010-11-08
  • 2012-11-09
  • 1970-01-01
  • 2022-01-22
  • 2011-10-30
相关资源
最近更新 更多