㈠ 【android休眠】之Android休眠機制
休眠,簡而言之就是設備在不需要工作的時候把一些部件、外設關掉(掉電或讓它進入低功耗模式)。
為什麼要休眠呢?一言以蔽之:省電。
休眠分主動休眠和被動休眠。主動休眠:比如我電腦不用了,就通過設置讓系統進入休眠模式;被動休眠:系統檢測到自己閑的慌,為了節約故,自己就休眠去了。
休眠是內核的核心工作,而Android是基於Linux內核的,所以Android休眠和內核有著千絲萬縷的聯系;由於Android的特殊應用場景:移動設備,所以Android休眠和內核又有著特別的需求。
1、聯系:
Android設備停止使用,系統沒有什麼事情可做,進入休眠狀態的功能最終是由內核去實現的;每一類硬體都有自己的驅動,具體的驅動決定怎麼進入休眠以及處於何種層次的休眠。比如:對於platform_device,就按照platform_driver定義的規則,在suspend調用的時候,去做上面提到的事情:
2、Android的特別需求:
比如對於自己的電腦,不用讓它休眠好了;但是對於我們形影不離的手機,在休眠的時候還要睜一隻眼:來電了要通知你,QQ啊微信啊什麼的由信息了也要通知你,所以Android在Linux內核休眠機制之上,提出了「Opportunistic Suspend」。
絮絮叨叨這么多,下面讓我們切切實實體驗下休眠。
1、休眠模式
休眠是分好幾種模式的,不同模式實現方式、耗電量不同,以下來自Documentation/power/states.txt:
雖說kernel支持上述四種休眠模式,但具體哪幾種可用取決於你的硬體。那麼怎麼知道自己的Android設備支持的休眠模式呢?
答案:通過/sys/文件系統。查詢支持的休眠模式可以cat文件/sys/power/state:
如果我們往/sys/power/state文件echo上面的某一種模式的字元串,系統就會進入相應的休眠模式:
如果你搜索過Android休眠相關的內容,在老版本的Android(4.4版本之前)會見有提到PowerManager的setPowerState()方法,該方法即是通過以上方式使系統進入休眠。但自從引入Autosleep後,就不在這么做了,setPowerState()方法也銷聲匿跡。
2、/sys/power/目錄下文件
文件簡介:
1、Android設備屏幕暗下來的時候,並不是立即就進入了休眠模式;當所有喚醒源都處於de-avtive狀態後,系統才會進入休眠。
2、Android設備連著adb線到其他設備的情況下,設備是不會進入休眠模式的。
3、有休眠操作就有喚醒,就需要喚醒源。喚醒源有很多種,在內核注冊,比如常用的Power按鍵。
4、曾經困惑的一個問題:系統怎麼知道自己應該進入休眠模式了?它的判斷依據是什麼?
在wakelock時代,系統休眠過程中去檢測休眠鎖;如果系統中沒有其他部件持有休眠鎖,就嘗試進入休眠模式,沒有異常事件發生的話就進入休眠模式。
Android從4.4開始使用autosleep機制,只要不存在任何active的喚醒源(wakeup_source)了,就進入休眠模式。
5、系統Power Manager整體流程
㈡ android系統休眠關閉了哪些功能
Android的幾種不同的休眠模式
如果不進行特別的設置,Android會在一定時間後屏幕變暗,在屏幕變暗後一定時間內,約幾分鍾,CPU也會休眠,大多數的程序都會停止運行,從而節省電量。但你可以在代碼中通過對Powmanager API的調用來設置不同的休眠模式。
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
如上表,最高等級的休眠是屏幕,鍵盤等,cpu都全部休眠。可以設置不同的模式,讓其產生不同的休眠,比如讓cpu保持運行。
㈢ java代碼怎麼控制android休眠和喚醒
喚醒:android.intent.action.SCREEN_ON (代碼)
休眠:android.intent.action.SCREEN_OFF (代碼)
android系統一段時間沒有操作,
屏幕(screen)將從高亮(bright)變為暗淡(dim),如果再過段時間還是沒有操作,屏幕(screen)從暗淡(dim)變為關閉(off).這時,系統將進入休眠.
而對於某些需要保持系統喚醒甚至屏幕喚醒的應用(比如視頻播放器和音樂播放器)來說,就必須要有一個機制,使得系統不進入休眠狀態,設置保持屏幕亮屏狀態.
wakelock即用來實現以上目的
接下來對每一個模塊具體分析:
powermanager
對應文件是android/frameworks/base/core/java/android/os/PowerManager.java
在Android中應用程序並不是直接同PowerManagerService交互的,而是通過PowerManager間接地與PowerManagerService打交道。
此文件定義了一個powermanager類.
主要實現了
1,wakelock的申請與釋放
public WakeLock newWakeLock(int flags, String tag)
2,系統延時進入休眠
public void userActivity(long when, boolean noChangeLights)
3,系統強制休眠
public void goToSleep(long time)
4,屏幕亮度設置
public void setBacklightBrightness(int brightness)
5,屏幕狀態查詢
public boolean isScreenOn()
6,系統重啟
public void reboot(String reason)
細節
wakelock的申請與釋放
{@samplecode
*PowerManager pm = (PowerManager)mContext.getSystemService(
* Context.POWER_SERVICE);
*PowerManager.WakeLock wl = pm.newWakeLock(
* PowerManager.SCREEN_DIM_WAKE_LOCK
* | PowerManager.ON_AFTER_RELEASE,
* TAG);
*wl.acquire();
* // ...
*wl.release();
一共有如下幾個flag來進行不一樣的喚醒方式.可以根據需要設置
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* can-off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
PROXIMITY_SCREEN_OFF_WAKE_LOCK on 距離感測器時關閉 off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
ACQUIRE_CAUSES_WAKEUP 確保wakelock,主要用於視頻播放器
ON_AFTER_RELEASE = 0x20000000 release後倒計時,關閉屏幕
...
userActivity的作用:
使系統從其他狀態進入全部打開狀態,比如從暗屏(dim)切換到亮屏,並重置倒計時計數器
㈣ android4.4.4沒有休眠時間選項
MIUI7嗎,是在「鎖屏和密碼」那裡修改的,實在找不到的話試試這個軟體KeepAwake
㈤ android 如何讓手機進入休眠狀態,又如何喚
1.WakeLock主要代碼如下:
PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass().getName());//持有喚醒鎖
wakeLock.setReferenceCounted(false);
wakeLock.acquire(30*1000);//30s亮屏
wakeLock.release();//釋放鎖,滅屏
2.FLAG_KEEP_SCREEN_ON代碼如下
可使用 FLAG_KEEP_SCREEN_ON 替換WakeLock的方式.
this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//亮屏
this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);//滅屏
㈥ Android應用禁止屏幕休眠的幾種方法
方法一:添加休眠鎖,休眠鎖必須成對出現。
方法二:在Activity布局中設置Windows屬性進行控制,但是一定要在載入布局之前執行,此種方法的局限性是只有在Activity類中有效,Activity退出時失效。
方法三:在View布局中添加屬性,此種方法的好處是不一定非要在Activity界面運行時屏幕常亮才有效,View啟動後可以自主設置。
View的xml布局中加入:
android:KeepScreenOn="true"
代碼中執行是否保持屏幕常亮:
View.setKeepScreenOn(true);
View.setKeepScreenOn(false);
㈦ 怎樣讓android系統休眠啊,關屏後還一直喚醒著,很耗電
讓android系統休眠,關屏後還一直喚醒著,很耗電的解決辦法如下:
系統運行的時候有很多軟體後台運行著,可以卸載一些不常用的軟體,來減低系統的負荷。
可以將系統屏幕關閉時間減少,來減少屏幕開啟時間過長,打開手機設置,點擊顯示,找到屏幕自動關閉選項,將時間設置到最低。
㈧ android 如何禁止系統休眠
使用如下代碼即可:
PowerManagerpm=
(PowerManager)getSystemService(Context.POWER_SERVICE);
mWakeLock=pm.newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK,"SoundRecorder");
mWakeLock.acquire();
看錯,原來不是指APP啊
㈨ 如何控制android 設備休眠 ,禁用休眠,設置等待時間
到設置~顯示~休眠下選擇合適的時間甚至取消休眠。
㈩ android手機休眠,就是鎖屏後service就不工作了,怎樣解決
鎖屏了以後手機就睡覺了,就是說cup不工作了,你要想讓它繼續工作,就必須在程序裡面獲得鎖,當你程序退出後在釋放鎖,不然的話你的手機電池很快就被耗完了,這個鎖要慎用,不然手機不能休眠會很耗電的。
要明確的 問題就是:屏幕鎖,屏幕黑,並不代表手機進入休眠了,可能cpu還在工作。
希望能幫到樓主