我正在尝试跨活动重复使用webview。这是我正在做的一个样本。
有两项活动,Main
和Secondary
。
在Main的onResume()中,我创建了一个webview对象,并将其保存在我的应用程序上下文中。
WebView wv = new WebView(getApplicationContext());
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
wv.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
Log.e("test", "onPageFinished");
((WebViewReuseApplication) getApplicationContext()).setCachedWebView(view);
}
});
wv.loadUrl("http://www.someurl.com/path/to/somewhere");
然后按下Main
中的按钮,我将他带到活动Secondary
。在这里,我从Application
对象获取已加载的网页视图,并将其附加到ViewGroup
。
onCreate()
的{{1}} -
Secondary
我正在做这一切,因为WebViews在Android中非常慢,我真的希望它在 WebView cachedWebView = ((WebViewReuseApplication) getApplicationContext()).getCachedWebView();
((LinearLayout) findViewById(R.id.webview_holder)).addView(cachedWebView, new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
Activity时预先加载。
虽然这非常有效,但这是一个问题。当它处于辅助活动时,如果我长按特定文本进行选择,然后单击网页搜索,我的应用程序崩溃了。 有没有办法解决这个问题?我真的想要这个预加载的东西,我出于同样的原因我不能用活动上下文初始化WebView。
更新 -
这是我得到的logcat输出 -
Secondary
答案 0 :(得分:0)
我认为您需要将下面提到的标志添加到您调用WebView的Activity的Intent中,
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
或者至少这是logcat错误报告的建议,
Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.
所以我相信这是你应该如何为较低的Android版本做到这一点。
如果上述解决方案不起作用,请将所有applcationContext替换为您的Activity上下文,
而不是,
WebView wv = new WebView(getApplicationContext());
试
WebView wv = new WebView(activity.this);
不仅在这里,而且在你可以使用的所有地方 getApplicationContext()