Articles of android wake lock

Android – 使用LocationManager.requestLocationUpdates时,是否需要WakeLock?

我的应用程序使用警报定期检查位置,以启动服务的BroastcastReceiver 。 我知道在开始服务之前我应该​​获得一个唤醒锁,但我的问题是我什么时候可以释放它? 如果我在调用requestLocationUpdates后释放唤醒锁,设备是否可以进入hibernate状态而不是调用我的LocationListener或者设备是否会一直唤醒以提供更新并保持清醒直到回调返回? 我不愿意抓住唤醒锁,因为这会阻止设备在更新之间hibernate,直到我完成该位置。

唤醒设备的正确,不推荐的方法是什么?

我的要求是:在GCM消息到达后,设备应该唤醒以显示高优先级通知。 设备应打开屏幕 。 目前我正在使用WakeLock来实现这一目标。 newWakeLock()方法需要传递一个锁级别和一个标志(作为第一个参数,按位或者)。 我正在使用PowerManager.ACQUIRE_CAUSES_WAKEUP标志,因为它完全符合我的需要。 但是,我对锁定级别感到有点沮丧。 所以根据文档 ,我有以下选择: PARTIAL_WAKE_LOCK – 与ACQUIRE_CAUSES_WAKEUP /不兼容,不会打开屏幕 SCREEN_DIM_WAKE_LOCK – 已弃用 SCREEN_BRIGHT_WAKE_LOCK – 已弃用 FULL_WAKE_LOCK – 已弃用 在这种情况下,建议的FLAG_KEEP_SCREEN_ON完全没用。 我最后只是压抑了弃用警告: @SuppressWarnings(“deprecation”) PowerManager.WakeLock screenOn = ((PowerManager) c.getSystemService(Context.POWER_SERVICE)).newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG); screenOn.acquire(); mNotifyMgr.notify(mNotificationId, mBuilder.build()); screenOn.release(); 问题 :在描述的情况下是否有一种不推荐的可靠方法来唤醒设备? 编辑我不是要求解决方法来唤醒设备。 我的问题是, 是否可以使用不推荐使用的API从后台唤醒设备(没有正在运行的Activity )

当CPUhibernate时,Handler post会不会被解雇吗?

我有一些活动与一些Handlers ,每隔不超过5分钟执行一次。 该活动是从BroadcastReceiver启动的,可以在屏幕关闭的情况下启动,等待用户抓取手机并获取用户输入,当发生这种情况时,会调用onPause()活动,以确保CPU处于睡眠模式。 我没有将活动设置为打开屏幕,因为我想尽可能多地保存电池。 我用我的手机测试了它并且工作得非常好,而屏幕关闭所有Handlers执行他们必须运行的所有代码。 如果我在活动打开时打开和关闭屏幕,一切正常。 现在,我已经到处读到,当屏幕关闭且CPUhibernate时,某些设备无法按预期工作,大多数时候都使用加速度计。 现在我的问题是,我是否需要获取一个WakeLock以便CPU在我的活动打开时不会睡觉? 我真的想知道这一点,因为正如我之前所说,我不想通过购买昂贵的WakeLock来“浪费”电池。 我更喜欢一个真正了解其工作原理的人的详细答案。

如何使Android设备始终处于唤醒模式?

成功设备root后。 现在,我需要让设备始终处于唤醒状态,即始终可见UI,无黑屏或任何白日梦屏幕。 为此,我想我要做到以下几点: 没有锁定屏幕 – 关闭 睡眠设置为“从不” 白日梦开始“关闭” 我发现所有关于应用程序层,即有一些应用程序可以执行上述任务。 但是,由于我的移动设备是根植的,我想用系统文件实现,这样即使其他一些应用程序试图改变上述function,那么它们也应该无法实现。

在Android上关闭屏幕

我试图在某个动作发生后打开和关闭显示器(让我们担心暂时关闭屏幕)。 根据我对唤醒锁的理解,这就是我所拥有的: PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “My Tag”); 当我在stackoverflow上阅读其他post时,他们似乎告诉我PARTIAL_WAKE_LOCK将关闭屏幕。 但是,如果我阅读SDK,它会说它只允许屏幕关闭。 所以我认为这是不对的。 任何提示都会有所帮助! 谢谢, 麦克风

即使我正在发布它,WakeLock仍然保持错误

我有一个应该在后台运行的服务。 它在我的应用程序打开时启动,并在用户关闭我的应用程序时结束。 每当我的应用程序在后台或屏幕关闭时,我仍然需要运行该服务。 我用WakeLock实现了这一点,但由于某种原因我在标题中得到了错误。 这是令人担忧的,因为我可能是内存泄漏WakeLock(如果我理解正确)。 我可以通过重新启动我的应用程序来触发错误。 这是相关的代码: public class SomeService extends Service { @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, “TAG”); if (!mWakeLock.isHeld()) mWakeLock.acquire(); //Handle other processing return START_STICKY; } @Override public void onDestroy() { if (mWakeLock.isHeld()) mWakeLock.release(); super.onDestroy(); } } […]

Android Espresso,测试前唤醒设备。 如何使用自定义清单进行测试?

我一直在用androids新的espresso框架编写测试,并发现它运行良好。 一个恼人的事情(特别是浓缩咖啡)是我必须确保我的屏幕醒来并解锁以便运行测试。 我发现了一种解决方法(通过各种来源),但我不确定整合它的最佳方法。 所以这就是我所做的,在我的“Home”活动中,我有以下代码: Home.class: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /************ Put this in a conditional for a test version ***********/ KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); KeyguardManager.KeyguardLock keyguardLock = km.newKeyguardLock(“TAG”); keyguardLock.disableKeyguard(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); } 您还需要添加以下权限: 所以在这样做之后,我的测试现在唤醒我的手机运行所以我没有必须站岗并确保屏幕在测试开始之前没有关闭。 我宁愿不在我的应用程序中包含这些权限。 我知道使用gradle可以制作具有自己的android清单的不同“风味”,它将合并到主清单中。 我正在考虑使用它,但我不想仅仅为了这个原因添加一种味道,因为这已经使用了测试构建types来运行。 从android gradle文档看起来,您无法为instrumentTest目录创建AndroidManifest,因为它将自动生成。 但是,我想知道是否有其他方法可以在不创建variables的情况下执行此操作,然后指定测试应该运行该变体。 此外,我不确定所有这些的确切语法,并认为只是在网站上为其他人提供此信息会很好,因为它似乎分散了。 最后,如果有人知道更好的方法来解决唤醒手机测试的问题,我很乐意听到它,因为我不是这种方式的忠实粉丝,我正在尝试。

从接收器/服务打开屏幕

我希望我的应用能够打开屏幕并显示我的应用。 假设我正在设置闹钟,每小时我都希望我的应用在设备自然睡眠前显示2分钟。 我看到WakeLock(FULL_LOCK)和KeyguardManager已被弃用。 我创建了一个WakefulBroadcastReceiver和服务,这些都在工作。 @Override protected void onHandleIntent(Intent intent) { // I need to show the screen here! for (int i=0; i<5; i++) { Log.i("SimpleWakefulReceiver", "Running service " + (i + 1) + "/5 @ " + SystemClock.elapsedRealtime()); try { Thread.sleep(5000); } catch (InterruptedException e) { } } Log.i("SimpleWakefulReceiver", "Completed service @ " + SystemClock.elapsedRealtime()); […]

Android蓝牙和WakeLock关系

我正在开发一个在后台运行的Android应用程序,并支持蓝牙配件。 我想在后台不断收听蓝牙设备尝试打开手机sockets。 我的问题是,是否有可能在不经常保留部分唤醒锁的情况下实现这一点,因为这显然会产生严重的电池后果。 所以我想知道的是蓝牙对手机入睡的影响。 打开蓝牙sockets时手机是否保持清醒状态? 如果设备尝试连接,蓝牙芯片是否会自动唤醒Android? 我试图做一些测试来回答这些问题,但很难分清唤醒锁的发生情况; 此外,我不知道我是否可以依赖于我观察到的行为或者是否可以在其他设备上进行更改。

三星“应用程序优化”function在3天后杀死后台应用程序

我们目前正在开发一款适用于健身追踪应用的Android应用。 它在后台不断运行,并且在大多数设备上运行良好,但是我们一直遇到应用程序在某些三星设备上完全死机的问题。 经过一番调查,似乎有些三星设备有一个完全自定义的“应用优化”function( http://forums.androidcentral.com/samsung-galaxy-s6/599408-app-optimisation-after-updating.html ),基本上是Dozefunction的(非常)原始版本,存在于Android的更高版本中,如果它们三天没有被使用,它们基本上只是谋杀应用程序。 由于此应用程序或多或少仅执行日志记录,并且未打开活动,因此对我们来说存在很大问题,因为此function已在许多三星设备上预先启用。 这个问题通过使用前台服务来解决,但这是一个解决方案的大锤,需要通过持续通知来扰乱用户,而我们真的不需要应用程序处于前台 – 我们对正常的电源很好管理Android。 三星应用程序优化function明确指出,如果应用程序未使用三天,它将“优化”应用程序。 有没有人了解三星认为“被使用”的东西,我能以某种方式触发吗? 侧面咆哮:在我看来,这是一个糟糕的实现function,使Android上的开发更具敌意。 除了我们的用例,它将会破坏任何信使应用程序。 如果不是因为Facebook Messenger和Whatsapp很难被豁免应用,那么用户就会疯狂,因为这会破坏他们的体验。