问题标签 [wakelock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
54584 浏览

android - 如何查看哪些唤醒锁处于活动状态

出于某种原因,我的 Android 手机无法进入睡眠状态。我假设一个唤醒锁让它保持清醒,但没有办法知道哪些唤醒锁是活动的。正在运行的服务没有列出任何可疑的东西,当然也与平常没有什么不同。所以我的问题是:

  1. 当进程结束时,Android 是否肯定会释放唤醒锁?是否有可能一个应用程序写得不好并且在退出之前没有释放唤醒锁?

  2. 有没有办法查看活动的唤醒锁?

dumpsys power表明:

0 投票
1 回答
816 浏览

android - 即使有唤醒锁,Android 服务也会停止

我一定没有正确实现唤醒锁。我就是这样做的。这个对吗?

和 onStart 方法

即使我使用 getLock(ctxt).acquire(); ,我似乎也无法弄清楚为什么服务在一段时间不活动后仍然被终止;谢谢你的帮助!-Dom

0 投票
3 回答
15755 浏览

android - WakeLock 在仍然举行的情况下完成

pmkeepScreenOn变量是全局定义的。

我在 OnCreate 方法中获取 PowerManager.WakeLock:

在我的 onStart、onResume 和 onRestart 中,我用

在我的 onDestroy、onPause 和 onStop 中,我使用以下命令释放锁:

在我的应用程序退出后,我得到一个失败屏幕并且 adb 抱怨说

java.lang.Exception:WakeLock 在仍被持有时完成:tpd

跟踪显示我在退出之前释放了锁。我错过了什么?

如果不跨越、 或中的至少一个,就无法退出应用 onPause程序。我可以看到应用程序调用 的频率与调用 acquire() 一样频繁,因此即使唤醒锁是引用计数的,它仍然应该具有零引用。onStoponDestroyrelease()

0 投票
1 回答
621 浏览

android - 警报管理器,使用唤醒锁确保所有代码运行

我正在考虑使用警报管理器,并在开发人员文档中阅读了这个,我不太明白。

我特别询问哪些情况下手机可能会在服务启动之前休眠(因为这是我不理解的部分)?是否取决于手机执行语句的速度?IE。它调用 startService() 打开另一个线程,因此原始线程可以在服务可用之前完成其工作?

谢谢

0 投票
1 回答
1480 浏览

android - 在等待来自单独线程的响应时保持处理程序和服务的活动?

我正在使用重复警报来触发 BroadcastReceiver ( OnAlarmReceiver),然后调用WakefulIntentService.sendWakefulWork(context, PmNotificationService.class);

doWakefulWork方法如下图

getRequestParameters().execute(getRequestHandler());行创建了一个AjaxRequest对象以及一个RequestHandler对象,其想法是一旦 Ajax 请求完成,它会将信息发送回RequestHandler.

在这种情况下,处理程序是PmNotificationService类(扩展WakefulIntentService)。

问题,因此我的问题的基础是以下消息:

05-12 12:09:08.139:INFO/ActivityManager(52):停止服务:com.sofurry/.services.PmNotificationService

05-12 12:09:08.558: WARN/MessageQueue(333): Handler{4393e118} 在死线程上向 Handler 发送消息

05-12 12:09:08.558: WARN/MessageQueue(333): java.lang.RuntimeException: Handler{4393e118} 在死线程上向 Handler 发送消息

...

显然,服务在发出请求后立即停止运行,因为该请求在另一个线程中运行,因此 Handler 已死。

所以我的问题是:我可以让服务和处理程序保持活动状态,直到我得到响应(即等待另一个线程)?如果可以的话,我会更喜欢它,因为 AjaxRequest 对象由其他人维护,并在整个应用程序中使用。

更新

我显然错过了一个非常重要的点,即WakefulIntentService继承自IntentService而不是Service意味着它将在完成工作后自行停止。我目前已经通过doWakefulWork稍微改变方法来解决它。这是新的:

我不确定 usingthread.join()是否是管理此问题的最佳方法,因此在发布答案之前,我会在几天内不回答这个问题,以防万一有人有更好的解决方案。

0 投票
2 回答
1692 浏览

android - 三星 Galaxy Tab 中的唤醒锁

我正在开发一个需要在后台发送和接收数据包的应用程序。但我发现,当屏幕关闭时,cpu 和网络也被禁用。所以我在 Android Developers 上发现,如果屏幕关闭,我应该使用唤醒锁和 wifi 锁来让 CPU 正常工作。此解决方案适用于 LG Optimus One 等其他设备,但不适用于三星 Galaxy Tab。使用此设备,当屏幕关闭时,我无法再接收数据包(UDP),当我按下电源按钮重新启用屏幕时,我神奇地重新启动以接收数据包。在我的代码中,我调用:

然后

我认为这是三星的错误,但我不确定,如果有人能给我一些提示,我将不胜感激。

PS我需要一些编程帮助......我已经知道如果我修改一些手动设置以避免关闭屏幕,这将起作用。但我正在开发一个应用程序,我需要代码!!

0 投票
1 回答
4393 浏览

android - 我应该在 IntentService 中使用 WakeLock 吗?

假设我使用 BroadcastReceiver 来接收唤醒手机的事件(意图),即使它处于深度睡眠模式(例如套接字上的传入数据包或传入的文本消息)。然后我将收到的数据转发到 IntentService 进行处理。我应该使用唤醒锁吗?

如果我不使用唤醒锁,我能否确保设备不会进入睡眠模式,直到我的服务的意图队列为空(因此服务停止)?(假设处理可能需要很长时间)。

如果需要 WakeLock,那么我应该在何时何地创建和获取它,以及何时释放它?我想在服务的意图队列为空后立即释放 WakeLock。

先感谢您

0 投票
1 回答
538 浏览

android - 如果我不创建线程,是否需要获取 WakeLock?

我正在创建一个Service将被设置为开始使用AlarmManager(使用ELAPSED_REALTIME_WAKEUP)。我在onStartCommand方法内进行所有处理,主要是因为:

  1. 不需要很长时间(从磁盘读取小文件,也许通过推送通知NotificationManager
  2. 如果需要,我可以轻松地将其设置为在单独的进程中启动。

在这种情况下,我还需要获取 WakeLock 吗?

据我所知,只有在创建单独的线程时才需要获取 WakeLock(因为操作系统会将主线程视为空闲并进入睡眠状态)。这是真的还是我仍然冒着被操作系统打断的风险......打瞌睡?

0 投票
3 回答
10165 浏览

android - 通过触摸而不是电源按钮激活 Android

我们有一个平板电脑应用程序,我们希望在一段时间后屏幕超时,但希望用户通过触摸屏幕而不是设备侧面的“电源”按钮来重新启用它。

对此最好的方法(电池性能)是什么?

  1. 使用部分唤醒锁定(屏幕会有反应吗?)
  2. 以某种方式禁用屏幕,但保持一切(包括触摸响应)正常工作?
  3. 其他?

对此有何建议?

0 投票
7 回答
11181 浏览

android - Android 中的 PROXIMITY_SCREEN_OFF_WAKE_LOCK 帮助

我在我的应用程序中启用了接近唤醒锁,当接近传感器检测到某些东西时它会关闭屏幕。但是当屏幕重新唤醒时出现了一个问题——它进入了锁屏,而不是我的应用程序。无论屏幕何时关闭(即使传感器在几秒钟后被清除),都会发生这种情况。这是我使用的代码:

有没有办法纠正这种行为?