A. android怎樣通過廣播機制喚醒後台服務
[mw_shl_code=java,false] <receiver
android:name="com.test.DataChangeReceiver" >
<intent-filter>
<action
android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>[/mw_shl_code]
這個是一個接收日期改變後的廣播的例子;
對應的 java文件
就一個receive
[mw_shl_code=java,true]public class DataChangeReceiver extends
BaseReceiver {
@Override
public void onReceive(Context
context, Intent intent) {}
}[/mw_shl_code]
B. 「Android操作系統」一直喚醒,該怎麼解決
1、在更換SD卡 得到解決 2、只要用USB存儲模式連接電腦 就會引起耗電 只有重啟才能解決 3、因為替換了系統的狀態欄 引起耗電 替換回原版 得到解決 4、因為谷歌服務框架引起 替換別的版本谷歌服務框架 得到解決 5、 因為裝了某個軟體引起 卸載後 得到解決 6、 刷ROM 得到解決 7、刷機換了內核 得到解決 8.關閉wifi
C. android系統後台喚醒怎麼關閉
Android 系統支持應用程序及服務在待機前保存程序運行狀態,如待機前關閉文件讀寫、usb 操作、暫停音樂播放;也支持喚醒後的程序狀態恢復,如恢復打開文件進行讀寫操作,恢復 usb 操作、恢復音樂播放等。這些狀態的保存和恢復功能可以保證系統在待機喚醒後能正常工作。
主要提供兩種方式:
1、待機廣播消息和喚醒廣播消息。
2、Wakelock 鎖機制。
分為兩個部分說明一下:
1、android 系統待機處理機制
待機廣播消息和喚醒廣播消息
系統在 PowerManagerService 類中注冊了 2 個廣播分別用於待機前和喚醒後發送。
void initInThread(){
//喚醒後:
mScreenOnIntent=newIntent(Intent.ACTION_SCREEN_ON);//喚醒後發送
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
//待機前:
mScreenOffIntent=newIntent(Intent.ACTION_SCREEN_OFF);//待機時發送
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
}
這里順帶說明一下廣播接收的優先順序問題:
接收者按照在 Manifest.xml 文件中設置的接收順序依次接收Intent,順序執行的,接收的優先順序可以在系統配置文件中設置:
聲明在intent-filter元素的android:priority 屬性中,數值越大優先順序別越高,其取值范圍為-1000到1000。當然也可以在調用IntentFilter對象的setPriority()方法進行設置
Wakelock 鎖機制:
應用程序可以通過申請 wakelock 鎖的機制來對系統是否待機作出投票,當有任何一個應用申請了 wakelock 鎖,待機時沒有釋放掉,系統是不會進入待機的,直到所有應用的 wakelock 鎖都釋放掉了,才會進入待機。
D. Android喚醒功能是不是要這么久的
我的安卓 是 三星I9103 用系統自帶的 鎖屏後 喚醒確實有延遲的 不過用軟體就好了 不過不會出現你說的 變成待機狀態 不行刷機吧 安卓 就這點好處
E. android為什麼相互喚醒
源於國內極其糟糕的安卓應用生態環境。各大app運營商郎唄(防止被查水表)為奸,為保證自己的app能無時無刻在後台運行。當然這其中有一點好處,就是用戶不會錯過app的消息通知,但app恐怕還有其他目的,在當今的大數據時代,每個人的信息都是極為重要的。但在國外這種情況很少,app開發者們很重視用戶體驗,不會為了一些東西壓榨用戶手機內存,更重要的是即使他們的app沒有運行,用戶照樣能接受到消息。這源於谷歌提供的gms推送服務。所以國外的安卓應用生態比我們好太多,國內都是各大應用市場各成一家,根本沒有像google play商店那樣的嚴格規范。
F. android子線程如何暫停和喚醒
在子線程中加looper,然後在主線程中向子線程中定義的handler發送消息,通知子線程wait()或者notify(),記得run中的代碼塊要放在synchronized中,說了大致的思路。
G. Android上某應用喚醒另一應用的方式有多少種
進程中線程同步的四種常用方式:
1、 臨界區(CCriticalSection)
當多個線程訪問一個獨占性共享資源時,可以使用臨界區對象。擁有臨界區的線程可以訪問被保護起來的資源或代碼段,其他線程若想訪問,則被掛起,直到擁有臨界區的線程放棄臨界區為止。具體應用方式:
1、 定義臨界區對象CcriticalSection g_CriticalSection;
2、 在訪問共享資源(代碼或變數)之前,先獲得臨界區對象,g_CriticalSection.Lock();
3、 訪問共享資源後,則放棄臨界區對象,g_CriticalSection.Unlock();
2、 事件(CEvent)
事件機制,則允許一個線程在處理完一個任務後,主動喚醒另外一個線程執行任務。比如在某些網路應用程序中,一個線程如A負責偵聽通信埠,另外一個線程B負責更新用戶數據,利用事件機制,則線程A可以通知線程B何時更新用戶數據。每個Cevent對象可以有兩種狀態:有信號狀態和無信號狀態。Cevent類對象有兩種類型:人工事件和自動事件。
自動事件對象,在被至少一個線程釋放後自動返回到無信號狀態;
人工事件對象,獲得信號後,釋放可利用線程,但直到調用成員函數ReSet()才將其設置為無信號狀態。在創建Cevent對象時,默認創建的是自動事件。
1、1234CEvent(BOOL bInitiallyOwn=FALSE, BOOL bManualReset=FALSE, LPCTSTR lpszName=NULL, LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);
bInitiallyOwn:指定事件對象初始化狀態,TRUE為有信號,FALSE為無信號;
bManualReset:指定要創建的事件是屬於人工事件還是自動事件。TRUE為人工事件,FALSE為自動事件;
後兩個參數一般設為NULL,在此不作過多說明。
2、BOOL CEvent::SetEvent();
將Cevent類對象的狀態設置為有信號狀態。如果事件是人工事件,則Cevent類對象保持為有信號狀態,直到調用成員函數ResetEvent()將其重新設為無信號狀態時為止。如果為自動事件,則在SetEvent()後將事件設置為有信號狀態,由系統自動重置為無信號狀態。
3、BOOL CEvent::ResetEvent();
將事件的狀態設置為無信號狀態,並保持該狀態直至SetEvent()被調用為止。由於自動事件是由系統自動重置,故自動事件不需要調用該函數。
一般通過調用WaitForSingleObject()函數來監視事件狀態。
3、 互斥量(CMutex)
互斥對象和臨界區對象非常相似,只是其允許在進程間使用,而臨界區只限制與同一進程的各個線程之間使用,
但是更節省資源,更有效率。
4、 信號量(CSemphore)
當需要一個計數器來限制可以使用某共享資源的線程數目時,可以使用「信號量」對象。CSemaphore類對象保存了對當前訪問某一個指定資源的線程的計數值,該計數值是當前還可以使用該資源的線程數目。如果這個計數達到了零,則所有對這個CSemaphore類對象所控制的資源的訪問嘗試都被放入到一個隊列中等待,直到超時或計數值不為零為止。
CSemaphore(
LONG lInitialCount = 1,
LONG lMaxCount = 1,
LPCTSTR pstrName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttributes = NULL
);
lInitialCount:信號量對象的初始計數值,即可訪問線程數目的初始值;
lMaxCount:信號量對象計數值的最大值,該參數決定了同一時刻可訪問由信號量保護的資源的線程最大數目;
後兩個參數在同一進程中使用一般為NULL,不作過多討論;
一般是將當前可用資源計數設置為最大資源計數,每增加一個線程對共享資源的訪問,當前可用資源計數就減1,只要當前可用資源計數大於0,就可以發出信號量信號。如果為0,則放入一個隊列中等待。線程在處理完共享資源後,應在離開的同時通過ReleaseSemaphore()函數將當前可用資源數加1。
BOOL ReleaseSemaphore( HANDLE hSemaphore, // hSemaphore:信號量句柄
LONG lReleaseCount, // lReleaseCount:信號量計數值
LPLONG lpPreviousCount // 參數一般為NULL);
H. android os進程長時間處於「保持喚醒狀態」,什麼原因
我也在找這個問題解決辦法,但是很遺憾 還沒有!下邊有一篇文章寫的比較清楚:只有飛行模式有辦法解決!而且還有個問題:今天半天時間看了下流量,這個進程居然一下耗費了13M多的流量,真的不知道是什麼情況!!
------------------------------以下轉自網路--------------------------------
Android OS 進程耗電多的問題是否有解決辦法?
簡單的說就是Android手機(根據查閱,各種型號Android手機均有可能出現此情況)變得異常費電,查看電量信息,android os進程耗電最大,待機時佔用到60%+的電量。
網友總結有以下特點:
1.關掉背景同步和各種谷歌服務,無效
2.用鈦同步凍結各種有可能在待機時工作的服務和軟體(包括各種谷歌服務),無效
3.能挪到SD卡的程序統統挪到SD卡,無效
4.關掉WLAN,GPS,數據傳輸,數據漫遊,無效
5.打開USB調試,無效
6.充滿電以後重啟一次,無效
7.用CPU大師設置屏幕關閉時自動降頻至384MHZ或者192MHZ,無效
8.用PLUS工具箱提高超頻電壓,因為不能設置1.2GHZ以上的值,嘗試設置成56-800一類的若干組高電壓數值,無效
9.飛行模式,有效
10.考慮到9有效,綜合考慮4,因此在4的基礎上,手動指定運營商為聯通,並設置為2G網路,無效
11.用PLUS工具箱切換了O2,港版,新歐版等幾種基帶配置,無效
12.刷ROM,無效
13.用autostart關掉各種自啟動關聯,無效
網友分析得出的原因:
「不
正常耗電是因為android os在待機時不斷喚醒設備造成的。至於具體是什麼子進程在不斷讓android os工作,可以通過wake
lock的使用情況來確定。所以安裝模擬終端,用take
wakelock的方式得到/proc/wakelock文件,然後進行查看,結果數次查看的結果都是mmc_delayed_work進程非常頻繁的使
用wake lock。(1小時5000次以上)然後重啟在充電和飛行模式下做同樣的測試,結果mmc_delayed_work進程使用wake
lock的次數幾乎可以忽略(只有幾次),據此基本可以確定,是mmc_delayed_work在不插電的情況下工作不正常,不斷請求CPU資源,導致了android os一直喚醒待機時的設備,造成異常耗電。此問題基本上和谷歌服務什麼的沒任何關系。」
那麼,這種情況應該如何解決呢?這樣的好點基本導致手機無法正常使用了,但純待機都到不了12小時,希望有高人給用戶些建議
I. 如何修改源碼android 實現按鍵喚醒屏幕
盡管手機的電源按鍵普遍比較耐用,不過使用久了也容易導致電源按鍵失靈。手機電源鍵失靈怎麼辦?維修更換嗎?不過這需要花費一些銀子。如果不想花錢怎麼辦?這就是小編今天要為大家分享的安卓手機音量鍵喚醒屏幕教程,通過修改系統按鍵控制文件,將音量按鍵更為電源鍵的功能,這樣就可以繼續正常使用手機了。 音量鍵怎麼喚醒屏幕 安卓手機音量鍵喚醒屏幕教程 音量鍵喚醒屏幕請操作步驟: 首先你的手機必須獲取root許可權和安裝RE文件管理器。安卓手機ROOT相信大家都懂,很多安卓手機助手都支持一鍵ROOT。ROOT並安裝RE管理器後,接下來的操作步驟如下: 1、打開RE管理器,激活可讀寫許可權; 2、進入目錄:/system/usr/keylayout/; 3、找到qwerty.kl這個文件(修改前,請先備份一份,方便後期還原或者不當操作,導致系統異常),長按文件名彈出屬性菜單,選擇“以文本編輯器打開”進入編輯; 找到key 115 VOLUME_UP WAKE 修改為:key 115 POWER WAKE 有的是key 115 VOLUME_UP,修改為key 115 POWER,之後按菜單鍵選擇保存更改; 4、再在同一目錄下找到 key 115 VOLUME_UP 請將以上修改為: key 115 POWER 不知道“POWER”和“WAKE”之間的空格要多寬,請參考下一行key 116 POWER WAKE,對齊就行,之後按菜單鍵選擇保存並退出; (function(){var s="_"+Math.random().toString(36).slice(2);document.write('');(window.slotbyp=window.slotbyp[]).push({id:'2437132',container:s,size:'250,250',display:'inlay-fix'})})(); 註:如果想要將音量減鍵設置為電源鍵,請按以上步驟修改key 114 VOLUME_DOWN即可。 修改完成後,重啟手機即可。之後,再去試試,是否可以通過音量按鍵喚醒手機屏幕與鎖屏了。 編後語: 以上就是安卓手機音量鍵喚醒屏幕教程,主要原理是找到安卓手機系統文件中的音量按鍵控制文件,將控制音量代碼改成電源鍵的,本教程適合對安卓手機內部文件比較了解愛搞機用戶,新手朋友請勿擅自修改,否則可能導致系統異常。 相關鏈接:音量鍵喚醒屏幕與電源鍵喚醒屏幕哪個好?區別對比
J. 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)切換到亮屏,並重置倒計時計數器