android - 如果获取了唤醒锁并且我的应用程序崩溃了,我该怎么办?

标签 android process crash wakelock kill-process

当标志设置为 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);
            };
        }

    }); 
}

您在这里所做的是在遇到异常时覆盖正常的崩溃行为,并让您自己有时间在应用程序完全崩溃并且您无望恢复之前清除任何真正需要清理的问题点。

关于android - 如果获取了唤醒锁并且我的应用程序崩溃了,我该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058178/

相关文章:

android - 解析XML并在TextView中显示

运行脚本后 pythonw.exe 进程不退出

linux - Linux 上的 SetPriorityClass 等价物

c - 为什么在成为孤立进程组时未收到 SIGHUP 信号

ios - 永远不应触发嵌套优化。这可能是由于自动布局工作发生在 NSISVariable 委托(delegate)回调中

android - Flutter : Could not find a generator for route RouteSettings ("/HomePage", null) 在 _WidgetsAppState

android - 我可以使用 Phonegap/cordova 框架复制目录吗?

android - 如何向 AccessibilityService 发送自定义事件?

multithreading - MAC OS X Yosemite上的简单多线程程序中的错误访问

c++ - OpenCV 帧率问题