Приложение вылетает при onBackPress при загрузке в веб-браузере - PullRequest
0 голосов
/ 28 января 2019

У меня есть ошибка, подобная этой

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);
        }
    }

Но мне нужно сделать это для обработки пользовательского интерфейса.Любой совет?

...