android使用throttle(節流閥 技術

2021-09-01 09:33:57 字數 1816 閱讀 4987

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方法設定資料物件 如果出現錯誤,一般在錯誤的最後...