当标志设置为 true 时,我的应用程序始终运行后台服务。如果是这种情况,即使应用程序关闭,此后台服务仍需要 CPU 时间。如果我获得了唤醒锁(不是为了“屏幕开启”的目的,而是为了这个后台服务),然后应用程序崩溃或用户 FC 它,那么我无法释放这个唤醒锁。
预期的结果是什么?
Android 是否知道这一点并释放唤醒锁?
我应该以什么方式处理这种情况?
当标志设置为 true 时,我的应用程序始终运行后台服务。如果是这种情况,即使应用程序关闭,此后台服务仍需要 CPU 时间。如果我获得了唤醒锁(不是为了“屏幕开启”的目的,而是为了这个后台服务),然后应用程序崩溃或用户 FC 它,那么我无法释放这个唤醒锁。
预期的结果是什么?
Android 是否知道这一点并释放唤醒锁?
我应该以什么方式处理这种情况?
这类问题也可能发生在 Android 的其他方面。作为我个人遇到的一个例子,如果您不释放相机对象并且您的应用程序崩溃,那么相机将不可用,直到用户重新启动。您可以像这样处理这些类型的情况:
// Store the default uncaughtexceptionhandler in a variable.
private Thread.UncaughtExceptionHandler previousHandler = Thread.currentThread().getUncaughtExceptionHandler(originalExceptionHandler);
@Override
public void onCreate(Bundle bundle){
Thread.currentThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler(){
@Override
public void uncaughtException(Thread thread, Throwable ex) {
try{
// release your wakelock here.
}
catch(Exception e){
// log
}
finally{
thread.setUncaughtExceptionHandler(previousHandler);
previousHandler.uncaughtException(thread, ex);
thread.setUncaughtExceptionHandler(previousHandler);
};
}
});
}
您在这里所做的是在遇到异常时覆盖正常的崩溃行为,并让自己有时间在应用程序完全崩溃并且您没有希望恢复之前释放真正需要清理的任何问题点。