在某些设备上,重新启动我的活动无法正常工作。活动的旧实例被销毁,但是当创建新实例(并且在屏幕上短暂闪烁)时,它也最终被销毁。重新启动活动的原因并不重要,但可以说这是因为设备轮换导致配置更改。这被我们的最终用户视为应用程序崩溃,因为窗口“消失”所以这显然是一个大问题。
这似乎与基本PhoneGap活动处理onDestroy事件的方式有关。我使用的是旧版本的PhoneGap - PhoneGap类的一些类名在最新版本中已经改变。
事件序列如下(状态取自activity lifecycle图表)。我已经强调了下面发生的一些重要事件:
DroidGap
来电this.appView.loadUrl("about:blank");
)DroidGap
来电finish()
)在上面的第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被销毁。我不明白为什么会这样。
答案 0 :(得分:1)
对于那些遇到同样问题的人来说,我发现我遇到的问题是在最新的电话空白中解决的(https://issues.apache.org/jira/browse/CB-2908)