我有一个ViewPager和TabLayout的活动如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<android.support.design.widget.AppBarLayout
android:id="@+id/item_appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/item_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="0dp"
app:layout_scrollFlags="scroll|enterAlwaysCollapsed">
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:id="@+id/item_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/item_viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</android.support.v4.view.ViewPager>
</android.support.design.widget.CoordinatorLayout>
其中一个片段是WebView。为了在滚动WebView时隐藏工具栏,我在NestedScrollView中使用了WebView。
在添加NestedScrollView之前,应用程序工作正常,但它并没有隐藏工具栏。
现在,只要WebView完成加载,应用就会在没有Java堆栈跟踪的情况下关闭。
片段布局位于
之下<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/browser_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/browser_loading_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/colorAccent"
android:layout_gravity="center"/>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="fill_vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<WebView
android:id="@+id/browser_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible">
</WebView>
</android.support.v4.widget.NestedScrollView>
</LinearLayout>
当要加载某些内容时,将调用mWebView.loadUrl。 WebView有一个客户端,这样当页面加载完成后,Spinner可见性就会消失,WebView就会显示出来。
Android监视器显示:
10-25 15:22:12.111 3871-3871/com.tpb.hn I/Browser: loadURL: WebView loading
10-25 15:22:12.113 3871-3871/com.tpb.hn I/cr_Ime: ImeThread is not enabled.
10-25 15:22:12.118 3871-3911/com.tpb.hn I/OpenGLRenderer: Initialized EGL, version 1.4
10-25 15:22:12.118 3871-3911/com.tpb.hn D/OpenGLRenderer: Swap behavior 1
[ 10-25 15:22:12.118 3871: 3911 D/ ]
HostConnection::get() New Host Connection established 0x7ffeeca88c00, tid 3911
10-25 15:22:12.126 3871-3936/com.tpb.hn E/libEGL: validate_display:99 error 3008 (EGL_BAD_DISPLAY)
10-25 15:22:12.136 3871-3936/com.tpb.hn I/VideoCapabilities: Unsupported profile 4 for video/mp4v-es
[ 10-25 15:22:12.138 3871: 3936 D/ ]
HostConnection::get() New Host Connection established 0x7ffeeb7fe080, tid 3936
10-25 15:22:12.219 3871-3871/com.tpb.hn W/chromium: [WARNING:shell.cc(299)] Instance: exe:chrome attempting to register an instance for a process it created for target: exe:chrome_renderer without the mojo:shell{client_process} capability class.
10-25 15:22:12.317 3871-3871/com.tpb.hn W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 3871
10-25 15:22:12.317 3871-3871/com.tpb.hn D/cr_Ime: [InputMethodManagerWrapper.java:59] isActive: false
10-25 15:22:12.418 3871-3876/com.tpb.hn I/art: Do partial code cache collection, code=24KB, data=29KB
10-25 15:22:12.419 3871-3876/com.tpb.hn I/art: After code cache collection, code=24KB, data=29KB
10-25 15:22:12.419 3871-3876/com.tpb.hn I/art: Increasing code cache capacity to 128KB
10-25 15:22:12.635 3871-3871/com.tpb.hn I/HNLoader: onResponse: [I@842b545
10-25 15:22:12.635 3871-3871/com.tpb.hn I/ContentAdapter: IdLoadDone:
10-25 15:22:13.673 3871-3876/com.tpb.hn I/art: Do partial code cache collection, code=55KB, data=61KB
10-25 15:22:13.673 3871-3876/com.tpb.hn I/art: After code cache collection, code=55KB, data=61KB
10-25 15:22:13.673 3871-3876/com.tpb.hn I/art: Increasing code cache capacity to 256KB
10-25 15:22:13.765 3871-3871/com.tpb.hn W/art: Attempt to remove non-JNI local reference, dumping thread
10-25 15:22:13.766 3871-3911/com.tpb.hn E/OpenGLRenderer: GL error: GL_INVALID_VALUE
10-25 15:22:13.766 3871-3911/com.tpb.hn A/OpenGLRenderer: GL errors! frameworks/base/libs/hwui/BakedOpRenderer.cpp:66
--------- beginning of crash
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: Chrome build fingerprint:
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: 1.0
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: 1
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: f3e1957e-ea20-4058-8e10-b7e303fde16a
10-25 15:22:13.788 3871-3911/com.tpb.hn W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
10-25 15:22:13.788 3871-3911/com.tpb.hn A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 3911 (RenderThread)
[ 10-25 15:22:13.788 1181: 1181 W/ ]
debuggerd: handling request: pid=3871 uid=10066 gid=10066 tid=3911
loadUrl是WebView开始加载时的
我已阅读有关致命信号6代码-6的帖子,但没有人提供解决方案。
非常感谢任何帮助。
编辑 - 我删除了WebView的默认不可见性,以及更改它的代码,并获得了更详细的更大跟踪。
我无法将其发布在此处,因为该帖子的结尾为59000个字符,但它现在位于PasteBin Here
答案 0 :(得分:1)
我有类似的问题。就我而言,问题出在这个代码上:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
}
我删除了这行代码,我的应用程序停止了崩溃。我在Android N上面对这个问题。
BTW Hardware acceleration is enabled by default if your Target API level is >=14
我认为这行代码是多余的。
答案 1 :(得分:0)
好吧,我找到了一种方法来获得我想要的行为。但不是为了解决原来的问题。
我发现了this StackOverflow帖子,建议扩展WebView并实现NestedScrollingChild here (Apache2)。
这完美无缺。但是,它不是解决实际问题的方法。
布局现在读取
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/browser_root"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ProgressBar
android:id="@+id/browser_loading_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/colorAccent"
android:layout_gravity="center"/>
<com.tpb.hn.story.NestedWebView
android:id="@+id/browser_webview"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="invisible">
</com.tpb.hn.story.NestedWebView>
</LinearLayout>
唯一的变化是添加layout_behavior。
答案 2 :(得分:0)
我有同样的问题 然后我添加了代码延迟处理程序
private void loadJavaScript(String script) {
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (mWebView != null) {
mWebView.evaluateJavascript(script, null);
return;
}
}
loadPage("javascript:" + script);
}
}, 500); //this
}