11

这是一个非常奇怪的小米设备的操作系统异常。即使我确实有 Fabric 提供的日志,堆栈跟踪也不会引用我的任何代码。

下面是 crashalytics(Fabric) 中报告的崩溃详细信息,

  • 21K 崩溃

  • 小米设备上的所有崩溃

  • 在 Android OS 版本 6、7 和 8 上崩溃

崩溃日志:

# OS Version: 8.1.0
# Device: Redmi Note 5 pro
# RAM Free: 30.1%
# Disk Free: 74.2%

#0. Crashed: main
       at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
       at android.widget.Editor.performLongClick(Editor.java:1205)
       at android.widget.TextView.performLongClick(TextView.java:10908)
       at android.view.View.performLongClick(View.java:6360)
       at android.view.View$CheckForLongPress.run(View.java:24768)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:171)
       at android.app.ActivityThread.main(ActivityThread.java:6606)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

--

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.widget.Editor$SelectionModifierCursorController.getMinTouchOffset()' on a null object reference
       at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
       at android.widget.Editor.performLongClick(Editor.java:1205)
       at android.widget.TextView.performLongClick(TextView.java:10908)
       at android.view.View.performLongClick(View.java:6360)
       at android.view.View$CheckForLongPress.run(View.java:24768)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:171)
       at android.app.ActivityThread.main(ActivityThread.java:6606)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

#0. Crashed: main
       at android.widget.Editor.touchPositionIsInSelection(Editor.java:1084)
       at android.widget.Editor.performLongClick(Editor.java:1205)
       at android.widget.TextView.performLongClick(TextView.java:10908)
       at android.view.View.performLongClick(View.java:6360)
       at android.view.View$CheckForLongPress.run(View.java:24768)
       at android.os.Handler.handleCallback(Handler.java:790)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:171)
       at android.app.ActivityThread.main(ActivityThread.java:6606)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:518)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

类似参考:

https://issuetracker.google.com/issues/37127697

带有牛轧糖的 java.lang.NullPointerException

也在小米官方论坛上提问http://en.miui.com/forum.php?mod=viewthread&tid=4595164

请尽快提供任何可行的解决方案。因为用户一定不会对这些崩溃感到满意。

提前致谢。

4

4 回答 4

8

1) 首先,仅在需要时,设置其中之一。

textView.setMovementMethod(LinkMovementMethod.getInstance());

或者 

setAutoLinkMask(Linkify.ALL);

或者

Linkify.addLinks(textView, Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES | Linkify.MAP_ADDRESSES);

2)其次,为TextView设置一个长按监听器,它必须返回true。

textView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View v) {
        // do soemthing if needed
        return true;
    }
});

小米设备存在一些内部崩溃问题。如果您先覆盖 setOnLongClickListener( reference ),然后执行第一步,它将使用内部实现,并且会继续崩溃。因此,按顺序执行上述步骤很重要。

我对其他解决方案持开放态度,但是通过遵循这种方法,我不再看到崩溃报告。

于 2019-09-23T20:16:44.427 回答
3

TextView您的应用程序中有自定义项吗?它是否可以调整大小或具有附加功能?

小米的安卓皮肤可能会干扰这一点,并导致崩溃。我建议尝试长按TextView应用程序中的所有 s。

于 2018-11-26T16:51:19.350 回答
0

当用户长按所有选定的文本时会发生这种情况。只需定义 longClickListener:

edit_text.setOnLongClickListener {
   doSomething()
   true
}

稍后您可以将其删除

edit_text.setOnLongClickListener(null)
于 2019-06-20T14:26:38.033 回答
0

对我来说,这个崩溃发生在TextView包含链接setAutoLinkMask(Linkify.ALL);并被调用视图时。在这种情况下,Android 会通过该视图处理所有点击(包括长点击)。在其他品牌的设备上长按打开链接,但是在小米设备上却发生了崩溃。看起来,他们onTouchEventTextView. 我玩了一下发现,布局文件中的设置解决了这个问题android:textIsSelectable="false"TextView

我知道,它不是可扩展的解决方案,但对我来说它是完美的,所以我停止了进一步调查。也许它会给别人一个提示。

于 2019-08-22T11:13:24.590 回答