所有 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 的活动。现在我已将堆栈跟踪作为 Intent 的附加信息传递。
现在因为 CrashActivity 是一个常规的 Android Activity,您可以以任何您想要的方式处理它。
现在是重要的部分,即如何捕获该异常。
虽然很简单。在覆盖的 onCreate 方法中调用 super 方法之后,在每个 Activity 中复制以下代码行。
Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler(this));
您的 Activity 可能看起来像这样……
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/