我在使用webview和电源按钮时遇到活动生命周期问题。
我正在使用webview中的游戏加载javascript页面,我在Application上下文中保留了webview,因此它可以在Activity破坏中幸存下来。我知道我应该保存这样的视图,但我有一个非常具体的场景,它是唯一的解决方案。在应用程序之间切换时工作正常(即使使用"不要保留活动"调试标志)但是当我这样做时:
我尝试打印出所有活动生命周期方法,并在两种情况下都相同。这两种情景有什么区别?
代码应用上下文:
public class MyApp extends Application {
private WebView mWebView;
//getter, setter ...
//preserving webview in app context
}
代码活动:
public void onCreate() {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWebView();
}
private void initWebView() {
MyApp app = (MyApp) getApplication();
mWebView = app.getWebView();
if (!app.isWebViewInitialized()) {
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setDomStorageEnabled(true);
mWebView.requestFocus();
mWebView.addJavascriptInterface(new JavascriptInterface(this), "JSInterface");
mWebView.loadUrl("http://js-game-url.com");
mWebView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
mWebView.setWebViewClient(new WebViewClient());
app.setWebViewInitialized(true);
} else {
try {
((ViewGroup) mWebView.getParent()).removeView(mWebView);
//todo remake the try catch
} catch(NullPointerException e) {
System.out.println("Null"); //todo remove try catch
}
}
webviewPlaceholder = (RelativeLayout) findViewById(R.id.rlayout2);
webviewPlaceholder.addView(mWebView);
}
protected void onPause() {
super.onPause();
webviewPlaceholder.removeView(mWebView);
}
protected void onResume() {
super.onResume();
initWebView();
}
protected void onDestroy() {
super.onDestroy();
webviewPlaceholder.removeView(mWebView);
}
我肯定错过了一些简单的东西,但我无法找到解决方案。
答案 0 :(得分:0)
活动生命周期不是问题,但是机智的webview javascript生命周期。在重新打开屏幕后重新创建活动时,webview没有获得焦点。这修好了它:
mWebView.requestFocus();