【我的Android进阶之旅】解决sqlcipher库:java.lang.IllegalStateException: get field slot from row 0 col 0 failed.

简介: 一、背景最近维护公司的大数据SDK,在大数据SDK里面加入了ANR的监控功能,并将ANR的相关信息通过大数据埋点的方式记录到了数据库中,然后大数据上报的时候上报到大数据平台,这样就可以实现ANR性能的监控功能。

一、背景

最近维护公司的大数据SDK,在大数据SDK里面加入了ANR的监控功能,并将ANR的相关信息通过大数据埋点的方式记录到了数据库中,然后大数据上报的时候上报到大数据平台,这样就可以实现ANR性能的监控功能。

但是,最近看友盟的大数据平台错误上, 有一个是调用大数据SDK上报时,查询数据库出现的异常,异常错误信息如下所示:

java.lang.IllegalStateException: get field slot from row 0 col 0 failed
    at net.sqlcipher.CursorWindow.getString_native(Native Method)
    at net.sqlcipher.CursorWindow.getString(CursorWindow.java:385)
    at net.sqlcipher.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:51)
    at android.database.CursorWrapper.getString(CursorWrapper.java:137)
    at com.j256.ormlite.sqlcipher.android.AndroidDatabaseResults.getString(AndroidDatabaseResults.java:135)
    at com.j256.ormlite.field.types.StringType.resultToSqlArg(StringType.java:39)
    at com.j256.ormlite.field.BaseFieldConverter.resultToJava(BaseFieldConverter.java:24)
    at com.j256.ormlite.field.FieldType.resultToJava(FieldType.java:819)
    at com.j256.ormlite.stmt.mapped.BaseMappedQuery.mapRow(BaseMappedQuery.java:60)
    at com.j256.ormlite.stmt.SelectIterator.getCurrent(SelectIterator.java:270)
    at com.j256.ormlite.stmt.SelectIterator.nextThrow(SelectIterator.java:161)
    at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:202)
    at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:265)
    at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:361)
    at com.xtc.data.database.OrmLiteDao.queryForPagesByOrder(OrmLiteDao.java:487)
    at com.xtc.bigdata.report.db.ReportDao.deleteByStatus(ReportDao.java:88)
    at com.xtc.bigdata.report.upload.ReportIntentService$1.onSuccess(ReportIntentService.java:84)
    at com.xtc.bigdata.report.upload.task.ReportTask$1.onResponse(ReportTask.java:121)
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:126)
    at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:760)

这里写图片描述

这个异常一下子就出现了 348次,影响了6个用户,有一款机型出现了316次, 里面将整个app的整体奔溃率拉高了。简直要命啊!

这里写图片描述

二、分析问题

猜测一、大数据SDK版本没更新

开始我以为是大数据SDK更新删除字段,增加字段后,没有升级大数据的数据库版本。但是之前发布的APP引用的大数据SDK的数据库版本为3,而刚刚发布的APP的大数据SDK的数据库版本为4,整体上数据库升级了,应该是没有问题的。

猜测二 、数据库查询的单条记录超过1MB

一开始,完全找不到原因,只能靠各种猜测,各种google,百度答案。查询到的有参考一样的链接如下所示:

其中有一段话,说的是
这里写图片描述

There’s a limit of 1MB on internal assets due to dynamic decompression; the 1MB limit also seems to apply to Cursor blobs but this doesn’t seem to be documented anywhere.

Generally you should avoid blobs in SQLite as they perform poorly; instead save the blob data as a file and store the location of the file in your DB.

1、分析抓取的日志

这里写图片描述

通过抓取到的日志信息来看,因为这个异常是发生在捕获到ANRException之后,触发了大数据SDK上报的操作而导致异常的。所以初步怀疑是ANR的堆栈信息太多导致查询数据库时候奔溃了。

2、一次性查询出来的多条信息超过1Mb是否会奔溃?

一开始我和另外一个同事进行压测,将拉取到的日志ANR异常日志的stackInfo循环500次插入数据库然后每200条取出来一次查询。这样一次性查询出来的多条信息查过了1Mb,但是完全没有奔溃一切正常。因此排除了一次性查询出来的多条信息超过1Mb是否会奔溃这个点。

3、一次性查询出来的单条信息超过1Mb是否会奔溃?

后来我又去测了一下,如果一条数据量超过1Mb会怎么样?测试结果是这个异常果断出现了。

测试方法如下:
点击某个按钮,执行下面的startTest() 方法,手动埋上一个ANRException,单挑的堆栈信息很大,测试代码是临时测试的。

private void startTest() {
        new Thread() {
            @Override
            public void run() {
                StringBuffer stack = new StringBuffer("[W][2018-01-30 +8.0 10:24:58.596][14396, 274][:][com.xtc.bigdata.monitor.anr.ANRMonitor, dumpBlockInfo, 48][stackTraceInfo:01-30 10:23:12.153\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:13.233\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:14.312\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:15.392\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:16.459\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:17.526\n" +
                        "com.xtc.widget.phone.view.IconCenterEditText.onFocusChange(IconCenterEditText.java:58)\n" +
                        "android.view.View.onFocusChanged(View.java:5216)\n" +
                        "android.widget.TextView.onFocusChanged(TextView.java:8032)\n" +
                        "android.view.View.clearFocusInternal(View.java:5099)\n" +
                        "android.view.View.unFocus(View.java:5132)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.requestChildFocus(ViewGroup.java:665)\n" +
                        "android.view.ViewGroup.requestChildFocus(ViewGroup.java:671)\n" +
                        "android.view.View.handleFocusGainInternal(View.java:4965)\n" +
                        "android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:645)\n" +
                        "android.view.View.requestFocusNoSearch(View.java:7688)\n" +
                        "android.view.View.requestFocus(View.java:7667)\n" +
                        "android.view.ViewGroup.requestFocus(ViewGroup.java:2629)\n" +
                        "android.view.View.requestFocus(View.java:7634)\n" +
                        "android.widget.TextView.onKeyUp(TextView.java:6022)\n" +
                        "android.view.KeyEvent.dispatch(KeyEvent.java:2701)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8426)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootI\n" +
                        "\n" +
                        "\n" +
                        "\n" +
                        "\n" +
                        "\n" +
                        "\n" +
                        "01-30 10:23:13.233\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:14.312\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:15.392\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:16.459\n" +
                        "com.xtc.watch.view.remoteadd.activity.MatchContactActivity$9.onKey(MatchContactActivity.java:503)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8416)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5899)\n" +
                        "android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:3417)\n" +
                        "android.os.Handler.dispatchMessage(Handler.java:102)\n" +
                        "android.os.Looper.loop(Looper.java:135)\n" +
                        "android.app.ActivityThread.main(ActivityThread.java:5418)\n" +
                        "java.lang.reflect.Method.invoke(Native Method)\n" +
                        "java.lang.reflect.Method.invoke(Method.java:372)\n" +
                        "com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1037)\n" +
                        "com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)\n" +
                        "\n" +
                        "01-30 10:23:17.526\n" +
                        "com.xtc.widget.phone.view.IconCenterEditText.onFocusChange(IconCenterEditText.java:58)\n" +
                        "android.view.View.onFocusChanged(View.java:5216)\n" +
                        "android.widget.TextView.onFocusChanged(TextView.java:8032)\n" +
                        "android.view.View.clearFocusInternal(View.java:5099)\n" +
                        "android.view.View.unFocus(View.java:5132)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.unFocus(ViewGroup.java:864)\n" +
                        "android.view.ViewGroup.requestChildFocus(ViewGroup.java:665)\n" +
                        "android.view.ViewGroup.requestChildFocus(ViewGroup.java:671)\n" +
                        "android.view.View.handleFocusGainInternal(View.java:4965)\n" +
                        "android.view.ViewGroup.handleFocusGainInternal(ViewGroup.java:645)\n" +
                        "android.view.View.requestFocusNoSearch(View.java:7688)\n" +
                        "android.view.View.requestFocus(View.java:7667)\n" +
                        "android.view.ViewGroup.requestFocus(ViewGroup.java:2629)\n" +
                        "android.view.View.requestFocus(View.java:7634)\n" +
                        "android.widget.TextView.onKeyUp(TextView.java:6022)\n" +
                        "android.view.KeyEvent.dispatch(KeyEvent.java:2701)\n" +
                        "android.view.View.dispatchKeyEvent(View.java:8426)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1507)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2479)\n" +
                        "com.android.internal.policy.impl.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1770)\n" +
                        "android.app.Activity.dispatchKeyEvent(Activity.java:2764)\n" +
                        "com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2372)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4128)\n" +
                        "android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4086)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3776)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3833)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3687)\n" +
                        "android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3647)\n" +
                        "android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3655)\n" +
                        "android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3621)\n" +
                        "android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5965)\n" +
                        "android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5939)\n" +
                        "android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.");

                for (int i =0 ;i <=5;i++){
                    stack.append(stack);
                }
                while (true) {
                    for (int i = 0;i < 1;i++) {
                        String stackString = new String(stack);
                        ANRException anrException = new ANRException(stackString);
                        ExceptionEvent exceptionEvent = new ExceptionEvent();
                        exceptionEvent.functionName = "ANR-ERROR-" + Constants.HOST_APP_ID;
                        exceptionEvent.reason = anrException.toString();
                        exceptionEvent.stack = stackString;
                        CollectionManager.getInstance().exceptionEvent(exceptionEvent);
                    }
                    try {
                        Thread.sleep(300000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }.start();
    }

然后果断的出现了异常,异常如下所示:

这里写图片描述

通过上面的测试,发现了这个crash的根本原因就是,单挑数据库的记录过大,导致查询的时候出现奔溃。

三、处理方法

3.1 将大数据SDK的ANR监控暂时屏蔽掉

,现有的ANR监控的堆栈信息太多,容易出问题。而且在我们进行压测的过程中,发现及时单条记录不超过1mb,但是多条记录过大的时候,http上报大数据的时候,http的请求的body过大也会导致请求失败,因此暂时将ANR监控的功能屏蔽掉。

3.2 对调用OrmLiteDao封装类的相关代码处加上 try/catch 处理

因为OrmLiteDao封装类里面,只捕获了SQL相关的异常,没有捕获其他类型的异常,所以出现的时候就会奔溃。

这里写图片描述

因为OrmLiteDao的封装类,我们在封装的时候只catch了sql操作习惯的异常,因此暂时在调用数据库操作的时候,在调用的地方加上 try/catch 捕获住刚才的IllegalStateException异常。

3.3 对 android-database-sqlcipher 进行升级

android-database-sqlcipher 这个项目中,

有人提了相同的Issue,链接如下所示:

https://github.com/sqlcipher/android-database-sqlcipher/issues/341#issuecomment-310289295

这里写图片描述

这里写图片描述

通过查看Issue的描述,发现和我们的这个crash类似。

然后我们将 net.zetetic:android-database-sqlcipher 库进行了升级。

一开始我们项目引用的版本为: net.zetetic:android-database-sqlcipher:3.5.4

这里写图片描述

单条数据太大的时候,就会奔溃

这里写图片描述

升级为 net.zetetic:android-database-sqlcipher:3.5.9
这里写图片描述

升级完成之后,重新编译APP,然后重新进行压测,发现这个crash不存在了。
这里写图片描述

四、总结

  • 不要在数据库中的单条数据插入太多的数据。
  • 通过升级net.zetetic:android-database-sqlcipher版本到3.5.9可以修复这个1MB的限制。

五、参考链接


这里写图片描述

作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:http://blog.csdn.net/ouyang_peng/article/details/79228417

如果觉得本文对您有所帮助,欢迎您扫码下图所示的支付宝和微信支付二维码对本文进行随意打赏。您的支持将鼓励我继续创作!

这里写图片描述

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
4天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
22天前
|
移动开发 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【4月更文挑战第3天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin的兴起,其在Android开发中的地位逐渐上升,但关于其与Java在性能方面的对比,尚无明确共识。本文通过深入分析并结合实际测试数据,探讨了Kotlin与Java在Android平台上的性能表现,揭示了在不同场景下两者的差异及其对应用性能的潜在影响,为开发者在选择编程语言时提供参考依据。
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第30天】 随着Kotlin成为开发Android应用的首选语言,开发者社区对于其性能表现持续关注。本文通过深入分析与基准测试,探讨Kotlin与Java在Android平台上的性能差异,揭示两种语言在编译效率、运行时性能和内存消耗方面的具体表现,并提供优化建议。我们的目标是为Android开发者提供科学依据,帮助他们在项目实践中做出明智的编程语言选择。
|
1月前
|
安全 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第24天】在移动开发领域,性能优化一直是开发者关注的焦点。随着Kotlin在Android开发中的普及,了解其与Java在性能方面的差异变得尤为重要。本文通过深入分析和对比两种语言的运行效率、启动时间、内存消耗等关键指标,揭示了Kotlin在实际项目中可能带来的性能影响,并提供了针对性的优化建议。
30 0
|
1月前
|
安全 Java Android开发
构建高效安卓应用:探究Kotlin与Java的性能对比
【2月更文挑战第22天】 在移动开发的世界中,性能优化一直是开发者们追求的关键目标。随着Kotlin在安卓开发中的普及,许多团队面临是否采用Kotlin替代Java的决策。本文将深入探讨Kotlin和Java在安卓平台上的性能差异,通过实证分析和基准测试,揭示两种语言在编译效率、运行时性能以及内存占用方面的表现。我们还将讨论Kotlin的一些高级特性如何为性能优化提供新的可能性。
66 0
|
1月前
|
安全 Java Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第18天】 在Android开发领域,Kotlin和Java一直是热门的编程语言选择。尽管两者在功能上具有相似性,但它们在性能表现上的差异却鲜有深入比较。本文通过一系列基准测试,对比了Kotlin与Java在Android平台上的运行效率,揭示了两种语言在处理速度、内存分配以及电池消耗方面的差异。此外,文章还将探讨如何根据性能测试结果,为开发者提供在实际应用开发中选择合适语言的建议。
|
29天前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
在开发高性能的Android应用时,选择合适的编程语言至关重要。近年来,Kotlin因其简洁性和功能性受到开发者的青睐,但其性能是否与传统的Java相比有所不足?本文通过对比分析Kotlin与Java在Android平台上的运行效率,揭示二者在编译速度、运行时性能及资源消耗方面的具体差异,并探讨在实际项目中如何做出最佳选择。
17 4
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第24天】 在移动开发领域,性能优化一直是开发者关注的重点。随着Kotlin的兴起,许多Android开发者开始从传统的Java转向Kotlin进行应用开发。本文将深入探讨Kotlin与Java在Android平台上的性能表现,通过对比分析两者在编译效率、运行时性能和内存消耗等方面的差异。我们将基于实际案例研究,为开发者提供选择合适开发语言的数据支持,并分享一些提升应用性能的最佳实践。
|
1月前
|
Java 编译器 Android开发
构建高效Android应用:探究Kotlin与Java的性能差异
【2月更文挑战第22天】随着Kotlin在Android开发中的普及,开发者们对其性能表现持续关注。本文通过深入分析Kotlin与Java在Android平台上的执行效率,揭示了二者在编译优化、运行时性能以及内存占用方面的差异。通过实际案例测试,为开发者提供选择合适编程语言的参考依据。
|
27天前
|
Java Maven Spring
SpringBoot运行出现 Lookup method resolution failed; nested exception is java.lang.IllegalStateException
SpringBoot运行出现 Lookup method resolution failed; nested exception is java.lang.IllegalStateException
35 0