没有强制关闭的Android例外

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)

}

这例如强制关闭我的程序,我只想继续!

Nit*_*lal 7

所有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/