我可能会丢失一些东西,但是每当在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/

09-10 12:58
查看更多