【问题标题】:Back button destroys activity in Crosswalk Android后退按钮会破坏 Crosswalk Android 中的活动
【发布时间】:2016-12-05 14:31:48
【问题描述】:

我们正在使用 Crosswalk 项目在我们的 Android 应用程序中实现 Web 视图。据我所知,Crosswalk 将跟踪应用程序是否可以返回网站(getNavigationHistory()),如果用户位于根目录下,它会在用户再次按下后退按钮时暂停活动.

应有的情况:

  1. 用户启动应用并看到索引
  2. 用户点击链接转到另一个页面
  3. 用户转到另一个链接
  4. 用户按下手机上的返回按钮并看到他在步骤 #2 中看到的页面
  5. 用户再次按下返回按钮返回索引
  6. 用户再次按下,现在应用程序已暂停

继续上一个场景,但这会破坏应用程序:

  1. 用户再次启动应用程序(恢复)
  2. 用户按下返回按钮
  3. 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”。导航回它创建了一个空白/黑色屏幕,看起来视图被破坏了。但这不仅仅是在浏览器中显示的合法空白页面。

标签: android webview back


【解决方案1】:

我使用这个功能回到 xwalkview。效果很好。

public boolean onKeyDown(int keyCode, KeyEvent event) {
    //WebView mWebView = (WebView) findViewById(R.id.webview);
    XWalkView mXWalkView = (XWalkView) findViewById(R.id.xWalkView);
    if (event.getAction() == KeyEvent.ACTION_DOWN) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_BACK:

                if (mXWalkView.getNavigationHistory().canGoBack()) {
                    mXWalkView.getNavigationHistory().navigate(XWalkNavigationHistory.Direction.BACKWARD, 1) ;
                } else {
                    finish();
                    if (MainActivity.mTencent.isSessionValid()) {
                        MainActivity.logout();
                    }
                }
                return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多