Phonegap活动重启失败

时间:2014-06-15 23:46:54

标签: android cordova

在某些设备上,重新启动我的活动无法正常工作。活动的旧实例被销毁,但是当创建新实例(并且在屏幕上短暂闪烁)时,它也最终被销毁。重新启动活动的原因并不重要,但可以说这是因为设备轮换导致配置更改。这被我们的最终用户视为应用程序崩溃,因为窗口“消失”所以这显然是一个大问题。

这似乎与基本PhoneGap活动处理onDestroy事件的方式有关。我使用的是旧版本的PhoneGap - PhoneGap类的一些类名在最新版本中已经改变。

事件序列如下(状态取自activity lifecycle图表)。我已经强调了下面发生的一些重要事件:

  1. 已创建活动实例1
  2. 活动实例1已启动
  3. 活动实例1已恢复
  4. 某种配置更改会导致活动重新启动
  5. 活动实例1已暂停
  6. 活动实例1已停止
  7. 活动实例1已销毁DroidGap来电this.appView.loadUrl("about:blank");
  8. 已创建活动实例2
  9. 活动实例2已启动
  10. 活动实例2已恢复
  11. 活动实例1完成DroidGap来电finish()
  12. 活动实例2已暂停
  13. 活动实例2已停止
  14. 活动实例2已销毁
  15. 在上面的第7点,基类在onDestroy中有这个来清理WebView:

    @Override
    /**
     * The final call you receive before your activity is destroyed. 
     */
    public void onDestroy() {
        super.onDestroy();
    
        if (this.appView != null) {
    
    
            // Send destroy event to JavaScript
            this.appView.loadUrl("javascript:try{PhoneGap.onDestroy.fire();}catch(e){};");
    
            // Load blank page so that JavaScript onunload is called
            this.appView.loadUrl("about:blank");
    
            // Forward to plugins
            this.pluginManager.onDestroy();
        }
        else {
            this.endActivity();
        }
    }
    

    在上面的第11点,基类在onPageFinished中执行此操作 - 只要网址加载完成就会运行,在这种情况下,“about:blank”:

    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    
    ...
    
        // Shutdown if blank loaded
        if (url.equals("about:blank")) {
            if (this.ctx.callbackServer != null) {
                this.ctx.callbackServer.destroy();
            }
            this.ctx.endActivity();
        }
    }
    

    endActivity就是这样:

    /**
     * End this activity by calling finish for activity
     */
    public void endActivity() {
        this.activityState = ACTIVITY_EXITING;
        this.finish();
    }
    

    日志记录显示,当我到this.finish()中的endActivity时,它正在为Activity实例1运行,但是Activity实例2被销毁。我不明白为什么会这样。

1 个答案:

答案 0 :(得分:1)

对于那些遇到同样问题的人来说,我发现我遇到的问题是在最新的电话空白中解决的(https://issues.apache.org/jira/browse/CB-2908