第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

java.lang.AssertionError Android WebView

標簽:
Java

4月份开始,就收集到有用户在webview里面的闪退日志,一直没能重现。
java.lang.AssertionError

第一种异常

java.lang.AssertionError

org.chromium.content.browser.input.ImeUtils.checkCondition(ImeUtils.java:1)
2 org.chromium.content.browser.input.ThreadedInputConnection.assertOnImeThread(ThreadedInputConnection.java:64)
3 org.chromium.content.browser.input.ThreadedInputConnection.beginBatchEdit(ThreadedInputConnection.java:132)
4 com.xxxx.xxx.xx.WMEditor$i.beginBatchEdit(RichEditor.java:665)
5 com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:473)
6 com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
7 android.os.Handler.dispatchMessage(Handler.java:105)
8 android.os.Looper.loop(Looper.java:164)
9 android.app.ActivityThread.main(ActivityThread.java:6938)
10 java.lang.reflect.Method.invoke(Native Method)
11 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
12 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

第二种异常

java.lang.AssertionError


org.chromium.content.browser.input.ImeUtils.checkCondition(ImeUtils.java:1)
2 org.chromium.content.browser.input.ThreadedInputConnection.assertOnImeThread(ThreadedInputConnection.java:64)
3 org.chromium.content.browser.input.ThreadedInputConnection.endBatchEdit(ThreadedInputConnection.java:136)
4  com.xxxx.xxx.xx.WMEditor$MInputConnection.endBatchEdit(RichEditor.java:787)
5 com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:482)
6 com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
7 android.os.Handler.dispatchMessage(Handler.java:105)
8 android.os.Looper.loop(Looper.java:164)
9 android.app.ActivityThread.main(ActivityThread.java:6940)
10 java.lang.reflect.Method.invoke(Native Method)
11 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
12 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

第三种异常

java.lang.AssertionError

org.chromium.content.browser.input.ImeUtils.checkCondition(ImeUtils.java:1)
2 org.chromium.content.browser.input.ThreadedInputConnection.assertOnImeThread(ThreadedInputConnection.java:64)
3 org.chromium.content.browser.input.ThreadedInputConnection.getExtractedText(ThreadedInputConnection.java:105)
4 com.xxxx.xxx.xx.WMEditor$MInputConnection.getExtractedText(RichEditor.java:823)
5 com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:326)
6 com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:85)
7 android.os.Handler.dispatchMessage(Handler.java:105)
8 android.os.Looper.loop(Looper.java:164)
9 android.app.ActivityThread.main(ActivityThread.java:6940)
10 java.lang.reflect.Method.invoke(Native Method)
11 com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
12 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

上周末,升级了最新的系统补丁,发现进入webview,直接闪退了,错误就是AssertionError。

先描述下这个问题板块的功能:使用webview,结合javascript、html,让webview里面的主div,可编辑。

因为手机品牌、android系统的兼容问题,在自定义webview里面,重写了部分键盘事件,就是这部分重写的代码造成了java.lang.AssertionError。

下面贴下 ,出错的代码

import android.content.Context;import android.view.inputmethod.EditorInfo;import android.view.inputmethod.InputConnection;import android.webkit.WebView;public class MEditor  extends WebView{    public MEditor(Context context) {        super(context);
    }    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {        return new MInputContection(super.onCreateInputConnection(outAttrs));
    }

    .
    .
    .
    .
    .
    .

}
import android.os.Bundle;import android.os.Handler;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.view.KeyEvent;import android.view.inputmethod.CompletionInfo;import android.view.inputmethod.CorrectionInfo;import android.view.inputmethod.ExtractedText;import android.view.inputmethod.ExtractedTextRequest;import android.view.inputmethod.InputConnection;import android.view.inputmethod.InputContentInfo;public class MInputContection extends InputConnection{    private MInputContection MiC=null;    public MInputContection(InputConnection in){        this.MiC=in;

    }

    .
    .
    .
    .
    .
    .    @Override
    public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {        if(MiC!=null){            return MiC.getExtractedText(request,flags);
        }        return null;
    }    @Override
    public boolean beginBatchEdit() {        if(MiC!=null){            return MiC.beginBatchEdit();
        }        return false;
    }    @Override
    public boolean endBatchEdit() {        if(MiC!=null){            return MiC.endBatchEdit();
        }        return false;
    }    @Override
    public boolean sendKeyEvent(KeyEvent event) {
        doSth();        return true;
    }



}

我的解决方案有两种:
第一种
针对收集到的日志,这个bug,出现在beginBatchEdit、endBatchEdit、getExtractedText这3个method里面,并且只会在7.0及以上的手机上才会产生。那么我们只需要处理这3个方法就可以了,改动代码如下:

判断系统版本private Boolean isN(){        if (Build.VERSION_CODES.N<=Build.VERSION.SDK_INT){            return true;
        }        return false;
    }

bug方法修改

                @Override
        public boolean beginBatchEdit() {            if ( isN()){                return false;
            }else{                if(mConnection!=null){                    return mConnection.beginBatchEdit();
                }
            }            return false;
        }
                @Override
        public boolean endBatchEdit() {            if ( isN()){                return false;
            }else{                try {                    return mConnection.endBatchEdit();
                } catch (Exception e) {
                }
            }            return false;
        }
                @Override
        public ExtractedText getExtractedText(ExtractedTextRequest request, int flags) {            if ( isN()){                return null;
            }else{                if(mConnection==null) {                    return null;
                }                return mConnection.getExtractedText(request,flags);
            }
        }

第二种
直接在javascript语言里面重写key事件,移除掉android里面的inputconnection。

public class MEditor extends WebView {        public MEditor(Context context)
       {
    }
        .
        .
        .
        .        @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) 
       {                                   
              return    super.onCreateInputConnection(outAttrs);
    }
        .
}
javascript 代码修改
mEditor.addEventListener("keyup", function(e) {
    doSth();
});

如果有其他解决方案,欢迎大家留言。



作者:Sn__
链接:https://www.jianshu.com/p/1f14be457ded

點擊查看更多內(nèi)容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學(xué)

大額優(yōu)惠券免費領(lǐng)

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報

0/150
提交
取消