我可能会丢失一些东西,但是每当在Android(或Java)中引发异常时,我的应用程序始终会强制关闭,并且整个程序都会终止。但是,当数据库查询出现问题时,我只想返回到主菜单。
try {
database.query(params);
} catch (Exception e) {
Log.e("Game", "Failed Loading Level", e);
returnToMenu();
}
}
例如,这强制关闭了我的程序,我只希望它继续!
最佳答案
所有android开发人员在开发应用程序时都必须面临强制关闭问题。
这是一种捕获该错误并优雅地对其进行处理的方法。
这将在您的android应用程序中创建一种错误页面的机制。因此,每当您的应用程序崩溃时,用户将无法看到该刺激性的弹出对话框。而不是该应用程序将向用户显示预设视图。
要建立这种机制,我们需要制作一个错误处理程序和一个Activity类,每当应用被强制关闭时,该类都会获取视图。
import java.io.*;
import android.content.*;
import android.os.Process;
public class ExceptionHandler implements java.lang.Thread.UncaughtExceptionHandler {
private final Context myContext;
public UncaughtExceptionHandler(Context context) {
myContext = context;
}
public void uncaughtException(Thread thread, Throwable exception) {
StringWriter stackTrace = new StringWriter();
exception.printStackTrace(new PrintWriter(stackTrace));
System.err.println(stackTrace);
Intent intent = new Intent(myContext, CrashActivity.class);
intent.putExtra(BugReportActivity.STACKTRACE, stackTrace.toString());
myContext.startActivity(intent);
Process.killProcess(Process.myPid());
System.exit(10);
}}
上面的类将充当强制关闭错误的侦听器。您可以看到,只要应用崩溃,就可以使用Intent和startActivity启动新的Activity。因此,每当应用程序崩溃时,它都会启动名为CrashActivity的活动。目前,我已经通过了堆栈跟踪作为意图的附加功能。
现在,由于CrashActivity是常规的Android Actitvity,因此您可以使用任何方式对其进行处理。
现在是重要的部分,即如何捕获该异常。
虽然很简单。在重写的onCreate方法中调用super方法之后,在每个Activity中复制以下代码行。
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this));
您的活动可能看起来像这样……
public class ForceClose extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this));
setContentView(R.layout.main);
// Your mechanism is ready now.. In this activity from anywhere if you get force close error it will be redirected to the CrashActivity.
}}
您可以从此链接下载zip文件
http://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/