主线程执行期间的Toast崩溃

时间:2017-04-02 07:10:13

标签: android android-fragments android-activity android-toast

我有一个方法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消息的片段)。

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

1 个答案:

答案 0 :(得分:1)

  

在onBackPressed期间发生异常。

下次调用null时会返回onBackPress(),因为您的片段当前未附加到任何活动。因此崩溃发生了。

_testHandler.removeCallbacks(_checker); 中,你必须取消预定的可运行程序:

{{1}}