for (;;)
// do something
}複製**
looper迴圈中取訊息會呼叫messagequeue的next方法,接下來看next方法:
final long now = systemclock.uptimemillis();
// do something
if (msg != null) else else
msg.next = null;
if (debug) log.v(tag, "returning message: " + msg);
msg.markinuse();
return msg;}}
複製**
對於延遲訊息,有乙個處理的時間點(when屬性)。在取訊息時,會判斷訊息是否到期,就是使用當前時間now和訊息when屬性進行比較,這裡沒什麼問題,有問題的是獲取當前時間(now)的方法:systemclock.uptimemillis(),下面看原始碼如何描述這個方法的:
/**
* returns milliseconds since boot, not counting time spent in deep sleep.
** @return milliseconds of non-sleep uptime since boot.
*/@criticalnative
native public static long uptimemillis();
複製**
powermanager pm = (powermanager) context.getsystemservice(context.power_service);
if (pm != null)
//釋放鎖
if (wakelock != null)
複製**
**封裝:
/**
* 使用需要在androidmanifest檔案中新增許可權如下:
* "android.permission.wake_lock"/>
*/public class cpuwakelock
}powermanager pm = (powermanager) activity.getsystemservice(context.power_service);
if (pm != null)
return
false;
}/**
* 給cpu解鎖,使cpu可以休眠
*/public synchronized void unlock
() }
public boolean islock
() }
複製**
參考
android休眠機制
由於濫用void 引發的bug
我一向認為在寫 時,void 濫用是有問題的,在最近的一次 中,有類似這樣一段 1 int send void buff,unsigned long size 23 int xx func char buff,unsigned long size 4 int send unsigned char b...
乙個bug引發的感想
上周五,系統出現乙個bug。基本描述如下 b功能上傳乙個到 b路徑 a功能要獲取b路徑的,但是獲取路徑寫錯了,寫成了a路徑。線上突然出現此問題,訂單無法完成。該功能用到的頻率還比較大。無法馬上布版本。首先的想法想通過改資料來解決,但是發現不行。資料是動態的,不能改,也改不過來。其次的想法 新增b路徑...
乙個 passive 引發的bug
不是什麼很難的東西,權且做個記錄。首先說下背景,目前的專案中,需要同時繫結 wheel 和 scroll 事件。繫結 wheel,目的是開發 ctrl wheel 縮放頁面功能,此功能與瀏覽器本身的衝突,因此需要禁用滾輪原生功能,示意 window.addeventlistener wheel fu...