use*_*572 0 java android exception-handling exception
我可能会遗漏一些东西,但每当在Android(或java)中抛出异常时,我的应用程序总是强制关闭,整个程序终止.但是当数据库查询出现问题时,我只想返回主菜单.
try {
database.query(params);
} catch (Exception e) {
Log.e("Game", "Failed Loading Level", e);
returnToMenu();
}
Run Code Online (Sandbox Code Playgroud)
}
这例如强制关闭我的程序,我只想继续!
所有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);
}}
Run Code Online (Sandbox Code Playgroud)
上面的类将作为强制关闭错误的监听器.您可以看到Intent和startActivity用于在应用崩溃时启动新的Activity.因此,只要应用程序崩溃,它就会启动名为CrashActivity的活动.现在我已经将堆栈跟踪作为intent的附加内容传递.
现在因为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.
}}
Run Code Online (Sandbox Code Playgroud)
你可以从这个链接下载zip文件
http://trivedihardik.wordpress.com/2011/08/20/how-to-avoid-force-close-error-in-android/
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |