Android异步任务引发神秘的运行时异常

Android异步任务引发神秘的运行时异常,android,Android,在极少数情况下,我会在一个异步任务中遇到这种神秘的运行时异常。我在我的应用程序中有多个地方实现了异步任务,但无论我多么深入地研究这些错误,我似乎都无法获得有关引发此RuntimeException的原因或它发生在哪个线程中的任何信息。根据“completedjustly=true”,我猜测异步任务中存在未捕获的异常,但我甚至不知道从何处开始尝试找出。。。思想?谢谢 根据,由于用户交互,突然完成是线程结束的标志。我猜在异步任务完成之前完成活动时会发生异常。放弃这种可能性应该很简单:只需将一个异步任

在极少数情况下,我会在一个异步任务中遇到这种神秘的运行时异常。我在我的应用程序中有多个地方实现了异步任务,但无论我多么深入地研究这些错误,我似乎都无法获得有关引发此RuntimeException的原因或它发生在哪个线程中的任何信息。根据“completedjustly=true”,我猜测异步任务中存在未捕获的异常,但我甚至不知道从何处开始尝试找出。。。思想?谢谢


根据,由于用户交互,
突然完成
是线程结束的标志。我猜在异步任务完成之前完成活动时会发生异常。放弃这种可能性应该很简单:只需将一个异步任务替换为无限循环,然后在仿真器上按“后退”。

根据,
突然完成
表示线程由于用户交互而完成。我猜在异步任务完成之前完成活动时会发生异常。放弃这种可能性应该很简单:只需将一个异步任务替换为无限循环,然后在仿真器上按“上一步”。

completedjustly=true
在执行的任务引发异常时发生。而
AsyncTask
的任务正在执行
doInBackground
方法

我建议您将
doInBackground
代码包装到
try
/
catch
块中,并让它打印发生的异常

protected Void doInBackground(Void... params) {
    try {
        // ----------
        // do stuff
        return null;
        // ----------
    } catch (Throwable t) {
        Log.e("AsyncTask", "OMGCrash", t);
        // maybe throw it again
        throw new RuntimeException(t);
    }
}

这应该会向您显示所有这些发生的原因。

completedAbruptly=true在执行的任务引发异常时发生。而
AsyncTask
的任务正在执行
doInBackground
方法

我建议您将
doInBackground
代码包装到
try
/
catch
块中,并让它打印发生的异常

protected Void doInBackground(Void... params) {
    try {
        // ----------
        // do stuff
        return null;
        // ----------
    } catch (Throwable t) {
        Log.e("AsyncTask", "OMGCrash", t);
        // maybe throw it again
        throw new RuntimeException(t);
    }
}

这应该会告诉你发生这一切的原因。

似乎你的
doInBackground
方法之一抛出了
RuntimeException
。似乎你的
doInBackground
方法之一抛出了
RuntimeException
。嗯,非常有用,但我在应用程序中只有一个活动。。。未完成任何活动。此外,在崩溃发生的30秒左右的时间里,我甚至没有触摸屏幕或与设备进行任何交互,所以我不确定是什么“用户交互”触发了这一点。。。嗯…嗯,非常有帮助,但我在应用程序中只有一个活动。。。未完成任何活动。此外,在崩溃发生的30秒左右的时间里,我甚至没有触摸屏幕或与设备进行任何交互,所以我不确定是什么“用户交互”触发了这一点。。。嗯……有趣;我已经用泛型catch(异常e)进行了try/catch,但是异常e似乎不在Throwable t所涵盖的范围内。换句话说,我假设这两种方法在处理一般崩溃案例时是等效的。
Throwable
涵盖了
Exception
Error
。得到一个
错误
是相当罕见的,但仍然是可能的;我已经用泛型catch(异常e)进行了try/catch,但是异常e似乎不在Throwable t所涵盖的范围内。换句话说,我假设这两种方法在处理一般崩溃案例时是等效的。
Throwable
涵盖了
Exception
Error
。获得
错误
的情况相当罕见,但仍然有可能。