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);
我有一个方法 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);