如果另一个Activity
导致未处理的异常被抛出,有没有办法要求Android返回我的应用程序中的上一个Activity
?
答案 0 :(得分:4)
当任何线程因未处理的异常而死亡时,您可以尝试使用Thread.setDefaultUncaughtExceptionHandler
接收通知。但我不确定Dalvik是否实施了该机制。有可能你无法从UncaughtExceptionHandler
开始另一个活动,因为文档没有说明线程/进程的复活。
更新
确定。我测试了它,现在我确定如果您的应用程序在UI线程中抛出异常,您将 NOT 能够使用上述技术返回到上一个Activity。发生这种情况是因为该异常会导致应用程序main looper退出,因此您的应用程序将无法处理任何进一步的UI消息。
我发现实现你想要的唯一可行方法是以下肮脏的黑客攻击:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
while (true) {
try {
Log.i("MyLooper", "Starting my looper");
Looper.loop();
} catch (Exception e) {
Log.e("MyLooper", "Caught the exception in UI thread, e:", e);
showPreviousActivity();
}
}
}
private void showPreviousActivity() {
// your implementation of showing the previous activity
}
}
在AndroidManifest.xml中注册MyApplication:
<application android:name=".MyApplication">
…
showPreviousActivity()
方法的实施取决于您。其中一个可能的解决方案是跟踪某些ActivityTracker类中的当前Activity实例,并从finish()
代码调用当前活动showPreviousActivity
方法。
答案 1 :(得分:0)
使用try-catch
块来捕获异常并在那里startActivity
。如果没有抓住它,你就不能去另一项活动。