【发布时间】:2016-12-05 14:31:48
【问题描述】:
我们正在使用 Crosswalk 项目在我们的 Android 应用程序中实现 Web 视图。据我所知,Crosswalk 将跟踪应用程序是否可以返回网站(getNavigationHistory()),如果用户位于根目录下,它会在用户再次按下后退按钮时暂停活动.
应有的情况:
- 用户启动应用并看到索引
- 用户点击链接转到另一个页面
- 用户转到另一个链接
- 用户按下手机上的返回按钮并看到他在步骤 #2 中看到的页面
- 用户再次按下返回按钮返回索引
- 用户再次按下,现在应用程序已暂停
继续上一个场景,但这会破坏应用程序:
- 用户再次启动应用程序(恢复)
- 用户按下返回按钮
- Activity 应该暂停但被销毁。
所以我想知道这是标准行为还是 Crosswalk 中的错误?
我希望应用在每次用户按下返回按钮时暂停。
我试图覆盖标准的后退行为,但这仍然会在第二次按下后退时破坏活动:
@Override
public void onBackPressed() {
DebugFunctions.showToast(mThis, "onBackPressed");
DebugFunctions.showLog(LOG_TAG, "onBackPressed");
DebugFunctions.showLog(LOG_TAG, "mXWalkView: " + String.valueOf(mXWalkView != null) + ", canGoBack: " + String.valueOf(mXWalkView.getNavigationHistory().canGoBack()));
if (mXWalkView != null && mXWalkView.getNavigationHistory().canGoBack()) {
DebugFunctions.showLog(LOG_TAG, "First");
mXWalkView.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1);
} else {
DebugFunctions.showLog(LOG_TAG, "Second");
moveTaskToBack(true);
}
}
另一个观察结果是,即使我在第二次启动应用程序时按下了一个链接(Crosswalk 应该注册),后退按钮也会破坏活动。
【问题讨论】:
-
我没有使用 Crosswalk 的经验,但是按下后退按钮时破坏活动是标准的 android 行为。引用自:developer.android.com/guide/components/…当用户按下Back按钮时,当前activity从栈顶弹出(activity被销毁)并恢复上一个activity(其UI恢复之前的状态)。
-
但是,在第一次后按时应用程序暂停,然后在第二次后按时,我什至无法在应用程序中导航回来,因为它只是关闭了应用程序,这并不奇怪完全?
-
对我来说,Crosswalk web 视图历史堆栈的第一页是“about:blank”。导航回它创建了一个空白/黑色屏幕,看起来视图被破坏了。但这不仅仅是在浏览器中显示的合法空白页面。