gpt4 book ai didi

Android UncaughtExceptionHandler 完成应用程序

转载 作者:太空狗 更新时间:2023-10-29 14:47:04 24 4
gpt4 key购买 nike

我想在记录未处理的异常后关闭应用程序。在这里搜索后,我做了以下内容:

public class MyApplication extends Application {
//uncaught exceptions
private Thread.UncaughtExceptionHandler defaultUEH;

// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
//logging code
//..........

//call the default exception handler
defaultUEH.uncaughtException(thread, ex);

}
};

public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
}

在调用 defaultUEH.uncaughtException(thread, ex); 之后,我尝试调用 System.exit() 以及 android.os.Process.killProcess( android.os.Process.myPid());(甚至我发现一些帖子被告知要同时使用两者)。问题是我出现黑屏,我必须使用手机任务管理器强制退出应用程序。我做错了什么?

问候

最佳答案

最后我解决了这个问题,创建了一个实现 Thread.UncaughtExceptionHandler 接口(interface)的类:

public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {

private BaseActivity activity;
private Thread.UncaughtExceptionHandler defaultUEH;

public MyUncaughtExceptionHandler(BaseActivity activity) {
this.activity = activity;
this.defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
}

public void setActivity(BaseActivity activity) {
this.activity = activity;
}

@Override
public void uncaughtException(Thread thread, Throwable ex) {

//LOGGING CODE
//........

defaultUEH.uncaughtException(thread, ex);

}
}

BaseActivity 中,我添加了以下代码:

//exception handling
private static MyUncaughtExceptionHandler _unCaughtExceptionHandler;

@Override
protected void onCreate(Bundle savedInstance) {
super.onCreate(savedInstance);

if(_unCaughtExceptionHandler == null)
_unCaughtExceptionHandler = new MyUncaughtExceptionHandler(this);
else
_unCaughtExceptionHandler.setActivity(this);

if(Thread.getDefaultUncaughtExceptionHandler() != _unCaughtExceptionHandler)
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}

我知道它与我在问题中使用的代码相同,但不知何故它现在可以工作了。当我有更多空闲时间时,我会深入研究以找到根本原因并将其发布

关于Android UncaughtExceptionHandler 完成应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38896483/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com