【发布时间】:2023-03-28 11:13:01
【问题描述】:
我正在构建某种传记的 android 应用程序。我必须加载aprox。 9个网址到不同的网页视图。我有一个 Viewpager,并为我拥有的每个 url 添加一个 webview。第一个 webview 加载本地 html 文件,其他 webview 加载 facebook、instagram、youtube 和其他网页。
我的问题是整个加载过程需要很长时间。当我添加了所有链接时,即使是第一页也加载缓慢。有时页面不会呈现,直到我在 webview 幻灯片之间滑动。这是我的实现:
public class MyViewPagerAdapter extends PagerAdapter {
private LayoutInflater layoutInflater;
public MyViewPagerAdapter() {
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View view = layoutInflater.inflate(layouts[position], container, false);
pageMap.put(position, view);
final WebView webView = (WebView)view.findViewById(R.id.webView);
final RelativeLayout loadingLayout = (RelativeLayout)view.findViewById(R.id.loadinLayout);
final TextView tvProgress = (TextView)view.findViewById(R.id.tvProgress);
final SwipeRefreshLayout mySwipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swipeContainer);
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
tvProgress.setText(progress+" %");
}
});
webView.setWebViewClient(new MyWebViewClient(loadingLayout));
webView.getSettings().setBuiltInZoomControls(false);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// chromium, enable hardware acceleration
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
else {
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
webView.loadUrl(urls[position].split("\\|",-1)[0]);
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webView.reload();
mySwipeRefreshLayout.setRefreshing(false);
}
}
);
container.addView(view);
return view;
}
@Override
public int getCount() {
return layouts.length;
}
@Override
public boolean isViewFromObject(View view, Object obj) {
return view == obj;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View view = (View) object;
container.removeView(view);
}
}
如何加快加载过程,或优先考虑 webviews 加载顺序?
【问题讨论】:
标签: android webview android-viewpager fragment