Toast 在主线程执行期间崩溃

Toast crash during main thread execution

我有一个方法 test(),它使用以下 Runnable 和 Handler decleration 在主线程中每 3 秒运行一次:

private Runnable _checker = new Runnable() {
    @Override
    public void run() {
    try {
        test();
    } finally {
        if (!_stopTest) {
            _testHandler.postDelayed(_checker, 3000);
        }
    }
    }
};

此 toast 消息在 test() 方法期间在主线程上运行:

Toast.makeText(getActivity(), "Recalculating...", Toast.LENGTH_SHORT).show();

以异常结束:

04-02 09:56:44.229 31232-31232/com.app E/UncaughtException: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference
                                                                     at android.widget.Toast.<init>(Toast.java:105)
                                                                     at android.widget.Toast.makeText(Toast.java:262)
                                                                     at com.BaseSupportFragment.test(BaseSupportFragment.java:916)

异常发生在 onBackPressed 期间,我重写它以删除片段容器(其中包含应该显示失败的 toast 消息的片段)。

有人知道这里发生了什么吗?

The exception occurs during onBackPressed.

下次 getActivity() 称为 returns null,因为您的片段当前未附加到任何 activity。因此发生崩溃。

onBackPress() 中,您必须取消计划的可运行项目:

_testHandler.removeCallbacks(_checker);