У меня есть ошибка, подобная этой
01-28 14: 16: 11.214 mobile.android.tribun.daerah.jambi A / libc: фатальный сигнал 6 (SIGABRT) в 0x00007b70 (код =-6), резьба 31600 (un.daerah.jambi) 01-28 14: 16: 12.074?E / JavaBinder: !!!СБОЙ СДЕЛКИ БИНДЕРА !!!01-28 14: 16: 12.074?E / JavaBinder: !!!СДЕЛКА СБОЙ БИНДЕРА !!!
Я запускаю веб-просмотр в одном действии, и веб-просмотр работает нормально, но если есть случаи, когда веб-просмотр загружается, и я выполняю onBackPressed, то происходит сбой.Ошибка вылетает как показано выше.Вот мой фрагмент кода
public class WebReadingActivity extends AppCompatActivity {
public static final String EXTRA_URL_NEWS = "extra_url_news";
private Unbinder unbinder;
@BindView(R.id.toolbar)
Toolbar toolbar;
@BindView(R.id.progress_frame)
FrameLayout progressbarFrame;
@BindView(R.id.progress_bar_line)
ProgressBar progressBar;
@BindView(R.id.webview_news)
WebView webViewNews;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_reading);
unbinder = ButterKnife.bind(this);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(false);
String urlData = getIntent().getStringExtra(EXTRA_URL_NEWS);
configureProgressbarLine();
loadNewsByWeb(urlData);
}
private void configureProgressbarLine(){
progressBar.setMax(100);
}
private void loadNewsByWeb(String url) {
webViewNews.setWebViewClient(new WebReadingClient());
webViewNews.setWebChromeClient(new ChromeClient());
webViewNews.getSettings().setJavaScriptEnabled(true);
webViewNews.getSettings().setAppCacheEnabled(true);
webViewNews.getSettings().setDomStorageEnabled(true);
webViewNews.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webViewNews.getSettings().setSupportMultipleWindows(true);
webViewNews.getSettings().setSupportZoom(false);
webViewNews.getSettings().setBuiltInZoomControls(false);
CookieManager.getInstance().setAcceptCookie(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webViewNews.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
CookieManager.getInstance().setAcceptThirdPartyCookies(webViewNews, true);
}
webViewNews.loadUrl(url);
}
@Override
protected void onDestroy() {
webViewNews.stopLoading();
unbinder.unbind();
super.onDestroy();
}
@Override
public void onBackPressed() {
if(webViewNews.isFocused() && webViewNews.canGoBack()){
webViewNews.goBack();
}else {
super.onBackPressed();
}
}
class ChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
progressbarFrame.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
setTitle("Loading...");
if(newProgress == 100){
progressbarFrame.setVisibility(View.GONE);
setTitle(view.getTitle());
}
super.onProgressChanged(view, newProgress);
}
}
public static class WebReadingClient extends WebViewClient{
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Timber.d("OnReceiverError --> %s", error.getDescription());
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
Timber.d("OnReceiverError --> %s",description);
}
}
}
ОШИБКА ОБНОВЛЕНИЯ
01-28 14: 35: 58.484 mobile.android.tribun.daerah.jambi A / libc: Фатальный сигнал 6 (SIGABRT) в 0x00000267 (код = -6), резьба 615 (un.daerah.jambi) 01-28 14: 35: 59.294?E / JavaBinder: !!!СБОЙ СДЕЛКИ БИНДЕРА !!!01-28 14: 35: 59,324?E / InputDispatcher: канал '431e6440 mobile.android.tribun.daerah.jambi / mobile.android.tribun.daerah.jambi.MainActivity (server)' ~ Канал неисправен и будет удален!01-28 14: 35: 59,324?E / InputDispatcher: канал '432eab68 mobile.android.tribun.daerah.jambi / mobile.android.tribun.daerah.jambi.NewReadingActivity (server)' ~ Канал неисправен и будет удален!01-28 14: 35: 59.654 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.support.v4.view.ViewCompat $ OnUnhandledKeyEventListenerWrapper', на который ссылается метод android.support.v4.view.ViewCompat.addOnUnhandledKeyEventListener 01-28 14: 35: 59.654 mobile.android.tribun.daerah.jambi E / dalvikvm: не удалось найти класс 'android.view.WindowInsets', на который ссылается метод android.support.v4.view.ViewCompat.disInatch01-28 14: 35: 59.674 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.view.WindowInsets', на который ссылается метод android.support.v4.view.ViewCompat.onApplyWindowInsets 01-2814: 35: 59.674 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.view.View $ OnUnhandledKeyEventListener', на который ссылается метод android.support.v4.view.ViewCompat.removeOnUnhandledKeyEventListener 01: 35: 59.684 mobile.android.tribun.daerah.jambi E / dalvikvm: не удалось найти класс 'android.support.v4.view.ViewCompat $ 1', повторноисточник из метода android.support.v4.view.ViewCompat.setOnApplyWindowInsetsListener 01-28 14: 35: 59.694 mobile.android.tribun.daerah.jambi E / dalvikvm: не удалось найти класс 'android.support.v4.widget.DrawerLayout $ 1', на которую ссылается метод android.support.v4.widget.DrawerLayout.01-28 14: 35: 59.694 mobile.android.tribun.daerah.jambi E / dalvikvm: не удалось найти класс 'android.view.WindowInsets', на который ссылается метод android.support.v4.widget.DrawerLayout.onDraw 01-2814: 35: 59.704 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.view.WindowInsets', на который ссылается метод android.support.v4.widget.DrawerLayout.onMeasure 01-28 14:35: 59.704 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.view.WindowInsets', на который ссылается метод android.support.v4.widget.DrawerLayout.onMeasure 01-28 14: 35: 59.754 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'android.graphics.drawable.RippleDrawable', на который ссылается метод android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering 01-28 14: 36: 02.384 mobile.android.tribun.daerah.jambi E / dalvikvm: Не удалось найти класс 'dalvik.system.DelegateLastClassLoader', на который ссылается метод ab.b 01-28 14: 36: 03.294 mobile.android.tribun.daerah.jambi E / AudioManagerAndroid: разрешение BLUETOOTH отсутствует!
ОБНОВЛЕНИЕ Я знаю подозреваемого, что причиной этого сбоя был прогресс на ChromeClient, если я закомментирую весь код внутри onProgress, как показано ниже, онотлично работает:
class ChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
/* NO CRASH WILL OCCUR IF COMMENT OUT
progressbarFrame.setVisibility(View.VISIBLE);
progressBar.setProgress(newProgress);
setTitle("Loading...");
if(newProgress == 100){
progressbarFrame.setVisibility(View.GONE);
setTitle(view.getTitle());
}
*/
super.onProgressChanged(view, newProgress);
}
}
Но мне нужно сделать это для обработки пользовательского интерфейса.Любой совет?