【RK3588】睡眠后重启Suspending console(s) (use no_console_suspend to debug)

现象

睡眠后重启Suspending console(s) (use no_console_suspend to debug)

log

[ 77.953708][ T2260] PM: suspend entry (deep)
[ 77.973357][ T2260] Filesystems sync: 0.019 seconds
[ 77.973430][ T2260] Freezing user space processes … (elapsed 0.008 seconds) done.
[ 77.981748][ T2260] OOM killer disabled.
[ 77.981758][ T2260] Freezing remaining freezable tasks … (elapsed 0.002 seconds) done.
[ 77.984467][ T2260] printk: Suspending console(s) (use no_console_suspend to debug)

操作

查看睡眠模式

我的3588开发板有2种模式:

console:/ # cat /sys/power/state
freeze mem

freeze模式:这种模式下,系统将所有进程暂停,并将它们的状态保存在内存中。CPU将进入低功耗状态,但内存还是会保持电源供应。这意味着在freeze模式下,系统可以快速恢复到之前的状态,并且应用程序不会因为进入睡眠模式而丢失数据。这个模式常用于节能,但仍然可以快速恢复的场景。

mem模式:这种模式下,系统将所有进程暂停,并将内存中的数据保存到硬盘中。CPU和内存都会进入低功耗状态。这意味着在mem模式下,系统将完全关闭,只有存储在硬盘中的数据能够恢复。这个模式在需要更长时间的休眠,且对功耗要求更高的情况下适用。

永不休眠

修改device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml文件,如下图所示:

- <integer name="def_screen_off_timeout">60000</integer>
+ <integer name="def_screen_off_timeout">0x7fffffff</integer>

关闭锁屏

0x7fffffff =2147483647

diff --git a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index aba8038e6f..8a24dd9944 100644
--- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -18,7 +18,7 @@
 -->
 <resources>
     <bool name="def_dim_screen">true</bool>
-    <integer name="def_screen_off_timeout">60000</integer>
+    <integer name="def_screen_off_timeout">2147483647</integer>
     <integer name="def_sleep_timeout">-1</integer>
     <bool name="def_airplane_mode_on">false</bool>
     <bool name="def_theater_mode_on">false</bool>
@@ -82,7 +82,7 @@
     <integer name="def_max_sound_trigger_detection_service_ops_per_day" translatable="false">1000</integer>
     <integer name="def_sound_trigger_detection_service_op_timeout" translatable="false">15000</integer>
 
-    <bool name="def_lockscreen_disabled">false</bool>
+    <bool name="def_lockscreen_disabled">true</bool>
     <bool name="def_device_provisioned">false</bool>
     <integer name="def_dock_audio_media_enabled">1</integer>

参考博客

Linux睡眠唤醒机制分析–以IMX6UL为例
RK3588-ANDROID12-永不息屏,不锁屏

### 关于HarmonyOS中Suspend的概念与用法 在HarmonyOS系统中,`suspend` 是一种线程状态,表示线程处于阻塞挂起的状态。这种状态下,线程不会占用CPU资源,直到特定条件满足或者被显式唤醒为止[^3]。 #### Suspend的具体含义 当提到 `suspend` 时,通常指的是线程由于某些原因而进入的一种被动等待状态。例如,在多任务环境中,如果某个线程正在等待某种同步机制(如锁、事件或信号量),它可能会进入 `pend` 或者 `suspend` 状态。具体来说: - **Pend**: 表示线程因请求锁、事件或其他同步对象未成功而导致的阻塞。 - **Suspend**: 主动挂起线程执行,通常是通过API调用来实现的。 - **Delay**: 延迟一段时间后再继续执行。 - **PendTime**: 类似于 `pend`,但带有超时机制。 这些状态都属于线程的阻塞态,意味着它们暂时无法参与调度。 #### 在后台任务中的应用 对于后台任务开发而言,合理管理线程生命周期非常重要。特别是在涉及长时间运行的任务(比如音乐播放器)时,开发者可以利用 HarmonyOS 提供的相关功能来优化性能并减少不必要的资源消耗。例如,应用程序可以通过 `setAVPlaybackState` 将其音频播放状态通知给系统,从而让系统更好地协调前台和后台活动之间的切换[^2]。 另外需要注意的是,在 Stage 模型下,虽然 ServiceExtensionAbility 不允许直接由第三方调用,但是仍然存在其他方式用于构建后台服务逻辑[^4]。这表明即使不能直接操作某些受限组件,也可以借助官方推荐的方法完成类似的功能需求。 以下是关于如何处理线程暂停的一个简单例子: ```java // Java 示例:模拟线程挂起恢复过程 public class ThreadExample { public static void main(String[] args) throws InterruptedException { MyThread myThread = new MyThread(); // 启动线程 myThread.start(); // 让主线程休眠一秒再尝试停止子线程 Thread.sleep(1000); System.out.println("Main thread suspending child..."); myThread.suspend(); // 继续等待两秒后重新激活子线程 Thread.sleep(2000); System.out.println("Main thread resuming child..."); myThread.resume(); } } class MyThread extends Thread { @Override public void run() { int count = 0; while (true){ synchronized(this){ try{ notifyAll(); wait(); }catch(Exception e){} System.out.println(++count+" times running."); } } } public void suspend(){ interrupt(); // 中断线程使其退出循环体外层判断部分 } public void resume(){ synchronized(this){ this.notify(); // 唤醒此实例上的单个线程 } } } ``` 上述代码片段展示了基本的线程控制技巧,尽管实际项目里可能更倾向于采用现代并发库而非原始方法来进行此类操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值