我已阅读Android Activity Lifecycles的文档,而且似乎不清楚的是:
调用finish()
的惯例是什么?
特别是:
Intent
。我是否在当前活动上致电finish()
?LoginActivity
调用的登录页面MainActivity
。在finish()
开始时,我是否MainActivity
致电LoginActivity
?完成身份验证后,是否可以在finish()
上致电LoginActivity
?答案 0 :(得分:1)
您的问题没有一个正确答案。这很大程度上取决于您的应用中的工作流程。
当ActivityA
启动ActivityB
但未调用finish()
时,ActivityA
堆栈中仍然存在Activity
任务。当ActivityB
结束时,ActivityA
将会显示,因为它现在是堆栈中的顶级Activity
。
当ActivityA
启动ActivityB
并自行调用finish()
时,任务中ActivityA
堆栈中不再出现Activity
。当ActivityB
结束时,ActivityA
将不会显示,因为它不再位于堆栈中。将显示Activity
下面的ActivityA
(如果有的话),否则任务结束,因为其中不再有任何实时活动。
答案 1 :(得分:0)
如果我们假设:
Activity is "Window Manager"
- 其主要组成部分是Window)
所以调用finish()等于Window'ed应用程序中的关闭按钮:)
要确认这个假设,我们可以查看Activity类定义
public class Activity extends ContextThemeWrapper
implements LayoutInflater.Factory2,
Window.Callback, KeyEvent.Callback,
OnCreateContextMenuListener, ComponentCallbacks2,
Window.OnWindowDismissedCallback {
...
private WindowManager mWindowManager;
/*package*/ View mDecor = null;
...
/**
* Call this when your activity is done and should be closed. The
* ActivityResult is propagated back to whoever launched you via
* onActivityResult().
*/
public void finish() {
finish(false);
}
/**
* Finishes current activity & specifies whether to remove the task associated with it.
*/
private void finish(boolean finishTask) {
...
}
}
回答你的问题你需要知道你计划在以后对你的活动做些什么? - 通常预测它的寿命!
何时调用完成??? 取决于应用程序代码中存在的许多因素,并且它是个性化的,需要采用单独的方法。
答案 2 :(得分:-1)
finish()主要在创建活动以获得结果时调用(startActivityForResult)。
它接收数据,计算某些内容然后调用完成以返回主应用程序。
按下后退按钮时也会隐式调用它。
最后,它用于主/细节活动对。例如,您选择要阅读的文章,然后返回列表。但是你应该使用片段来实现这一点。