throttle 技術其實並不提公升效能,這個技術主要是防止系統被超過自己不能處理的流量給搞垮了,這其實是個保護機制。使用throttle技術一般來說是對於一些自己無法控制的系統,只要是非同步,一般都會有throttle機制。
比如:在android系統中大量是使用contentobserver(contentobserver用於監聽資料變化),一般情況會在contentobserver中的onchange方法作相關查詢工作,也就說會生成游標。當某時瞬間游標生成過多(資料庫查詢極端頻繁,但屬於正常的插入,而且不能用批量插入),會導致記憶體不夠而被系統自動終止該程式。這時我們就可以使用throttle技術。
**如下:
public class throttle was last called. */
private long mlasteventtime;
private mytimertask mrunningtimertask;
/** constructor with default timeout */
public throttle(string name, runnable callback, handler handler)
/** constructor that takes custom timeout */
public throttle(string name, runnable callback, handler handler,int mintimeout,
int maxtimeout)
/** constructor for tests */
/* package */ throttle(string name, runnable callback, handler handler,int mintimeout,
int maxtimeout, clock clock, timer timer)
mname = name;
mcallback = callback;
mclock = clock;
mtimer = timer;
mhandler = handler;
mmintimeout = mintimeout;
mmaxtimeout = maxtimeout;
mtimeout = mmintimeout;
}private void debuglog(string message)
private boolean iscallbackscheduled()
public void cancelscheduledcallback()
}/* package */ void updatetimeout()
if (debug) debuglog("timeout extended " + mtimeout);
} else
mlasteventtime = now;
}public void onevent() else
}/**
* timer task called on timeout,
*/private class mytimertask extends timertask
@override
public boolean cancel()
private class handlerrunnable implements runnable }}
}/* package */ int gettimeoutfortest()
/* package */ long getlasteventtimefortest()
}
Android使用Application總結
第二步 配置全域性的context 第三步 使用,使用的時候用的時候根據類的名稱訪問context void onconfigurationchanged configuration newconfig void oncreate 這裡才是真正的入口點。void onlowmemory void o...
Android動畫使用
android動畫基本上分為兩個時代,乙個是3.0 api14 之前的animation動畫,乙個是3.0之後的animator動畫。採用animatorset和objectanimator配合,使用objectanimator進行更精細化控制,並且能夠自動驅動,多個objectanimator組合...
Android 使用Databinding遇到的坑
modle的get和set方法名稱在get set之後的第乙個字母一定要大寫 gradle裡面的apt版本要1.6以上,現在用的是1.8 和butterknife一起用的時候,需要在butterknife呼叫init 之後設定binding的set x方法設定資料物件 如果出現錯誤,一般在錯誤的最後...