Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android屏幕关闭后线程出现问题_Android_Service_Multithreading_Timer_Action - Fatal编程技术网

Android屏幕关闭后线程出现问题

Android屏幕关闭后线程出现问题,android,service,multithreading,timer,action,Android,Service,Multithreading,Timer,Action,我正在做一个应用程序,它在服务中监听android.intent.action.SCREEN_OFF(如果需要的话),然后它应该等待几秒钟并启动一个操作,我尝试了计时器调度方法、线程和处理程序postDelay方法,但所有这些方法似乎都失败了,它们从未在设备上执行过,手机被锁定后,它似乎被冻结/杀死了。它可以在模拟器和连接到USB的设备上工作,但不能只在电池上工作,这实际上是一个主要场景 你知道解决这个问题的方法吗?很有可能你有一套手机,这样当它被插入时,它就不会真正锁定或休眠(这是开发人员的设

我正在做一个应用程序,它在服务中监听android.intent.action.SCREEN_OFF(如果需要的话),然后它应该等待几秒钟并启动一个操作,我尝试了计时器调度方法、线程和处理程序postDelay方法,但所有这些方法似乎都失败了,它们从未在设备上执行过,手机被锁定后,它似乎被冻结/杀死了。它可以在模拟器和连接到USB的设备上工作,但不能只在电池上工作,这实际上是一个主要场景


你知道解决这个问题的方法吗?

很有可能你有一套手机,这样当它被插入时,它就不会真正锁定或休眠(这是开发人员的设置之一),想象一下仿真器的行为是一样的。因此,您必须覆盖手机的锁定设置或更改方法。一般规则是,当屏幕关闭时,您的活动结束。

我现在无法测试这一点(目前不在我的Android设备附近),但是

广播接收器有没有点火


如果是这样,就在你被呼叫的时候,你需要抓取一个部分,这样CPU就会一直保持清醒,直到计时器触发。

部分唤醒锁会让CPU保持运行,所以你应该在你的广播接收器中获取它以关闭屏幕,然后在你做任何事情后释放它。当您插入USB时,CPU将继续为USB连接提供服务(事实上,内核中的USB部件拥有自己的唤醒锁)


回答你的另一个问题,是的,甚至是背景线程。一旦每个人都处理完屏幕关闭广播,CPU就会关闭,直到有人重新打开CPU,你才能再次运行。

实际上,我认为我的唤醒锁出了问题。它似乎不起作用,我是在一个屏幕关闭动作被发送后获得它的,所以实际上系统已经关闭了,这可能是一个原因吗?