#android #wake #bindings #api #level #devices #wake-lock

android-wakelock

安全且易于使用的Rust绑定,用于Android WakeLock API

1 个不稳定版本

0.1.0 2023年7月15日

并发中排名#772

MIT许可证

20KB
182 代码行

Android WakeLock

Crates.io Documentation License

安全且易于使用的Rust绑定,用于Android WakeLock API。唤醒锁允许应用程序或服务在完成某些工作期间保持Android设备的显示屏或处理器唤醒。有关唤醒锁的更多信息,请参阅官方Android指南

文档

请查阅文档以获取最新的用法和示例。

许可证

本库使用MIT许可证。有关详细信息,请参阅LICENSE文件。


lib.rs:

安全且易于使用的Rust绑定,用于Android WakeLock API。唤醒锁允许应用程序或服务在完成某些工作期间保持Android设备的显示屏或处理器唤醒。有关唤醒锁的更多信息,请参阅官方Android指南

简而言之:使用此API可能会显著影响设备电池寿命。除非您确实需要,否则不要获取WakeLock,使用尽可能低的级别,并确保尽快释放它们。

平台支持

此库应适用于所有Android API级别。当然,它不能用于任何其他操作系统。

创建唤醒锁

创建唤醒锁最简单的方法是使用partial函数,该函数创建一个配置有合理默认值的partial唤醒锁。这是唤醒锁的最低级别,在保持设备唤醒以执行计算的同时对电池寿命影响最小。

如果您想创建具有不同级别或不同标志的唤醒锁,可以使用WakeLock::builder创建一个Builder,该Builder提供了设置其他支持的唤醒锁选项的方法。

从Rust创建唤醒锁是一项相对昂贵的操作,因此最好在应用程序运行时预先创建唤醒锁并在需要时重复使用它们,而不是按需创建。

获取和释放唤醒锁

唤醒锁处于休眠状态,直到被获取。要获取唤醒锁,请在唤醒锁上调用 acquire。这将返回一个保护对象,它会保持唤醒锁被获取,直到它被丢弃

// Create the wake lock.
let wake_lock = android_wakelock::partial("myapp:mytag")?;

// Start keeping the device awake.
let guard = wake_lock.acquire()?;

// Do some work while the device is awake...

// Release the wake lock to allow the device to sleep again.
drop(guard);

多个线程可以共享同一个唤醒锁,并可以同时获取它。只要至少有一个线程获取了唤醒锁,设备就会保持唤醒状态。

use std::{sync::Arc, thread};

// Create the wake lock.
let wake_lock = Arc::new(android_wakelock::partial("myapp:mytag")?);
let wake_lock_clone = wake_lock.clone();

// Spawn multiple threads that use the same wake lock to keep the device awake
// while they do some work.
let worker1 = thread::spawn(move || {
    // Keep the device awake while this worker runs.
    let _guard = wake_lock_clone.acquire().unwrap();

    // Do some work...
});
let worker2 = thread::spawn(move || {
    // Keep the device awake while this worker runs.
    let _guard = wake_lock.acquire().unwrap();

    // Some more work...
});

worker1.join().unwrap();
worker2.join().unwrap();

依赖项

~1–13MB
~99K SLoC