鍒╃敤Handler鏉ヤ慨鏀笰ndroid鐨刄I
鏈€杩戝湪鍋氫竴涓被浼间簬QQ鑱婂ぉ鐨勭晫闈?鍙戠幇鐢ㄥ瓙绾跨▼鎺ュ彈娑堟伅鍚?褰撲紶鍏ヤ富UI鐨勬椂鍊?浼氭姤瀛愮嚎绋嬩笉鑳戒慨鏀逛富绾跨▼UI鐨勯敊璇?/p>
鍦ㄨ繖閲屽姝ょ被闂杩涜鎬荤粨 涓昏瑙e喅鐨勬槸 瀛愮嚎绋嬩慨鏀逛富绾跨▼UI鐨勯棶棰?/p>
涓嬮潰鏄憳瑕佺殑涓€绡囧崥鏂?/p>
鏂规硶涓€锛?java涔犳儻锛屽湪android涓嶆帹鑽愪娇鐢級
鍒氬垰寮€濮嬫帴瑙ndroid绾跨▼缂栫▼鐨勬椂鍊欙紝涔犳儻濂藉儚java涓€鏍凤紝璇曞浘鐢ㄤ笅闈㈢殑浠g爜瑙e喅闂
new Thread( new Runnable() {public void run() {
myView.invalidate();
}
}).start();
鍙互瀹炵幇鍔熻兘锛屽埛鏂癠I鐣岄潰銆備絾鏄繖鏍锋槸涓嶈鐨勶紝鍥犱负瀹冭繚鑳屼簡鍗曠嚎绋嬫ā鍨嬶細Android UI鎿嶄綔骞朵笉鏄嚎绋嬪畨鍏ㄧ殑骞朵笖杩欎簺鎿嶄綔蹇呴』鍦║I绾跨▼涓墽琛屻€?/p>
鏂规硶浜岋細锛圱hread+Handler)
鏌ラ槄浜嗘枃妗e拰apidemo鍚庯紝鍙戣甯哥敤鐨勬柟娉曟槸鍒╃敤Handler鏉ュ疄鐜癠I绾跨▼鐨勬洿鏂扮殑銆?/p>
Handler鏉ユ牴鎹帴鏀剁殑娑堟伅锛屽鐞哢I鏇存柊銆俆hread绾跨▼鍙戝嚭Handler娑堟伅锛岄€氱煡鏇存柊UI銆?/p> Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case TestHandler.GUIUPDATEIDENTIFIER:
myBounceView.invalidate();
break ;
}
super .handleMessage(msg);
}
}; class myThread implements Runnable {
public void run() {
while ( ! Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = TestHandler.GUIUPDATEIDENTIFIER;
TestHandler. this .myHandler.sendMessage(message);
try {
Thread.sleep( 100 );
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
浠ヤ笂鏂规硶demo鐪?http://rayleung.javaeye.com/blog/411860
鏂规硶涓夛細锛坖ava涔犳儻锛屼笉鎺ㄨ崘锛?/span>
鍦ˋndroid骞冲彴涓渶瑕佸弽澶嶆寜鍛ㄦ湡鎵ц鏂规硶鍙互浣跨敤Java涓婅嚜甯︾殑TimerTask绫伙紝TimerTask鐩稿浜嶵hread鏉ヨ瀵逛簬璧勬簮娑堣€楃殑鏇翠綆锛岄櫎浜嗕娇鐢ˋndroid鑷甫鐨凙larmManager浣跨敤Timer瀹氭椂鍣ㄦ槸涓€绉嶆洿濂界殑瑙e喅鏂规硶銆?鎴戜滑闇€瑕佸紩鍏mport java.util.Timer; 鍜?import java.util.TimerTask;
public class JavaTimer extends Activity {Timer timer = new Timer();
TimerTask task = new TimerTask(){
public void run() {
setTitle( " hear me? " );
}
};
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
timer.schedule(task, 10000 );
}
}
鏂规硶鍥涳細(TimerTask + Handler)
瀹為檯涓婅繖鏍峰仛鏄笉琛岀殑锛岃繖璺烝ndroid鐨勭嚎绋嬪畨鍏ㄦ湁鍏筹紒搴旇閫氳繃閰嶅悎Handler鏉ュ疄鐜皌imer鍔熻兘鐨勶紒
public class TestTimer extends Activity {Timer timer = new Timer();
Handler handler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1 :
setTitle( " hear me? " );
break ;
}
super .handleMessage(msg);
}
};
TimerTask task = new TimerTask(){
public void run() {
Message message = new Message();
message.what = 1 ;
handler.sendMessage(message);
}
};
public void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.main);
timer.schedule(task, 10000 );
}
}
鏂规硶浜旓細( Runnable + Handler.postDelayed(runnable,time))
鍦ˋndroid閲屽畾鏃舵洿鏂?UI锛岄€氬父浣跨敤鐨勬槸java.util.Timer,java.util.TimerTask, android.os.Handler缁勫悎銆傚疄闄呬笂Handler 鑷韩宸茬粡鎻愪緵浜嗗畾鏃剁殑鍔熻兘銆?nbsp;
private Handler handler = new Handler();private Runnable myRunnable = new Runnable() {
public void run() {
if (run) {
handler.postDelayed( this , 1000 );
count ++ ;
}
tvCounter.setText( " Count: " + count);
}
};
鐒跺悗鍦ㄥ叾浠栧湴鏂硅皟鐢?/p>
handler.post(myRunnable);
handler.post(myRunnable,time);
妗堜緥鐪嬶細http://shaobin0604.javaeye.com/blog/515820
====================================================================
鐭ヨ瘑鐐规€荤粨琛ュ厖锛?/strong>
寰堝鍒濆叆Android鎴朖ava寮€鍙戠殑鏂版墜瀵筎hread銆丩ooper銆丠andler鍜孧essage浠嶇劧姣旇緝杩锋儜锛岃鐢熺殑鏈塇andlerThread銆乯ava.util.concurrent銆乀ask銆丄syncTask鐢变簬鐩墠甯傞潰涓婄殑涔︾睄绛夎祫鏂欓兘娌℃湁璋堝埌杩欎簺闂锛屼粖澶╁氨杩欎竴闂鍋氭洿绯荤粺鎬х殑鎬荤粨銆傛垜浠垱寤虹殑Service銆丄ctivity浠ュ強Broadcast鍧囨槸涓€涓富绾跨▼澶勭悊锛岃繖閲屾垜浠彲浠ョ悊瑙d负UI绾跨▼銆備絾鏄湪鎿嶄綔涓€浜涜€楁椂鎿嶄綔鏃讹紝姣斿I/O璇诲啓鐨勫ぇ鏂囦欢璇诲啓锛屾暟鎹簱鎿嶄綔浠ュ強缃戠粶涓嬭浇闇€瑕佸緢闀挎椂闂达紝涓轰簡涓嶉樆濉炵敤鎴风晫闈紝鍑虹幇ANR鐨勫搷搴旀彁绀虹獥鍙o紝杩欎釜鏃跺€欐垜浠彲浠ヨ€冭檻浣跨敤Thread绾跨▼鏉ヨВ鍐炽€?/p>
瀵逛簬浠庝簨杩嘕2ME寮€鍙戠殑绋嬪簭鍛樻潵璇碩hread姣旇緝绠€鍗曪紝鐩存帴鍖垮悕鍒涘缓閲嶅啓run鏂规硶锛岃皟鐢╯tart鏂规硶鎵ц鍗冲彲銆傛垨鑰呬粠Runnable鎺ュ彛缁ф壙锛屼絾瀵逛簬Android骞冲彴鏉ヨUI鎺т欢閮芥病鏈夎璁℃垚涓?strong>绾跨▼瀹夊叏绫诲瀷锛屾墍浠ラ渶瑕佸紩鍏ヤ竴浜涘悓姝ョ殑鏈哄埗鏉ヤ娇鍏跺埛鏂帮紝杩欑偣Google鍦ㄨ璁ndroid鏃跺€掓槸鍙傝€冧簡涓媁in32鐨勬秷鎭鐞嗘満鍒躲€?/p>
1. 瀵逛簬绾跨▼涓殑鍒锋柊涓€涓猇iew涓哄熀绫荤殑鐣岄潰锛屽彲浠?span style="color: #ff0000;">浣跨敤postInvalidate()鏂规硶鍦ㄧ嚎绋嬩腑鏉ュ鐞嗭紝鍏朵腑杩樻彁渚涗簡涓€浜涢噸鍐欐柟娉曟瘮濡俻ostInvalidate(int left,int top,int right,int bottom) 鏉ュ埛鏂颁竴涓煩褰㈠尯鍩燂紝浠ュ強寤舵椂鎵ц锛屾瘮濡俻ostInvalidateDelayed(long delayMilliseconds)鎴杙ostInvalidateDelayed(long delayMilliseconds,int left,int top,int right,int bottom) 鏂规硶锛屽叾涓涓€涓弬鏁颁负姣
2. 褰撶劧鎺ㄨ崘鐨勬柟娉曟槸閫氳繃涓€涓?span style="color: #ff0000;">Handler鏉ュ鐞?/strong>杩欎簺锛屽彲浠ュ湪涓€涓嚎绋嬬殑run鏂规硶涓皟鐢╤andler瀵硅薄鐨?postMessage鎴杝endMessage鏂规硶鏉ュ疄鐜帮紝Android绋嬪簭鍐呴儴缁存姢鐫€涓€涓秷鎭槦鍒楋紝浼氳疆璁鐞嗚繖浜涳紝濡傛灉浣犳槸Win32绋嬪簭鍛樺彲浠ュ緢濂界悊瑙h繖浜涙秷鎭鐞嗭紝涓嶈繃鐩稿浜嶢ndroid鏉ヨ娌℃湁鎻愪緵 PreTranslateMessage杩欎簺骞叉秹鍐呴儴鐨勬柟娉曘€?/p> 3. Looper鍙堟槸浠€涔堝憿? 锛屽叾瀹濧ndroid涓瘡涓€涓猅hread閮借窡鐫€涓€涓狶ooper锛孡ooper鍙互甯姪Thread缁存姢涓€涓秷鎭槦鍒楋紝浣嗘槸Looper鍜孒andler娌℃湁浠€涔堝叧绯伙紝鎴戜滑浠庡紑婧愮殑浠g爜鍙互鐪嬪埌Android杩樻彁渚涗簡涓€涓猅hread缁ф壙绫籋anderThread鍙互甯姪鎴戜滑澶勭悊锛屽湪HandlerThread瀵硅薄涓彲浠ラ€氳繃getLooper鏂规硶鑾峰彇涓€涓狶ooper瀵硅薄鎺у埗鍙ユ焺锛屾垜浠彲浠ュ皢鍏惰繖涓狶ooper瀵硅薄鏄犲皠鍒颁竴涓狧andler涓幓鏉ュ疄鐜颁竴涓嚎绋嬪悓姝ユ満鍒讹紝Looper瀵硅薄鐨勬墽琛岄渶瑕佸垵濮嬪寲Looper.prepare鏂规硶灏辨槸鏄ㄥぉ鎴戜滑鐪嬪埌鐨勯棶棰橈紝鍚屾椂鎺ㄥ嚭鏃惰繕瑕侀噴鏀捐祫婧愶紝浣跨敤Looper.release鏂规硶銆?/p> 4.Message 鍦ˋndroid鏄粈涔堝憿? 瀵逛簬Android涓璈andler鍙互浼犻€掍竴浜涘唴瀹癸紝閫氳繃Bundle瀵硅薄鍙互灏佽String銆両nteger浠ュ強Blob浜岃繘鍒跺璞★紝鎴戜滑閫氳繃鍦ㄧ嚎绋嬩腑浣跨敤Handler瀵硅薄鐨剆endEmptyMessage鎴杝endMessage鏂规硶鏉ヤ紶閫掍竴涓狟undle瀵硅薄鍒癏andler澶勭悊鍣?/strong>銆傚浜嶩andler绫绘彁渚涗簡閲嶅啓鏂规硶handleMessage(Message msg)鏉ュ垽鏂紝閫氳繃msg.what鏉ュ尯鍒嗘瘡鏉′俊鎭?/strong>銆傚皢Bundle瑙e寘鏉ュ疄鐜癏andler绫绘洿鏂癠I绾跨▼涓殑鍐呭瀹炵幇鎺т欢鐨勫埛鏂版搷浣溿€傜浉鍏崇殑Handler瀵硅薄鏈夊叧娑堟伅鍙戦€乻endXXXX鐩稿叧鏂规硶濡備笅锛屽悓鏃惰繕鏈塸ostXXXX鐩稿叧鏂规硶锛岃繖浜涘拰Win32涓殑閬撶悊鍩烘湰涓€鑷达紝涓€涓负鍙戦€佸悗鐩存帴杩斿洖锛屼竴涓负澶勭悊鍚庢墠杩斿洖 . 5. java.util.concurrent瀵硅薄鍒嗘瀽锛屽浜庤繃鍘讳粠浜婮ava寮€鍙戠殑绋嬪簭鍛樹笉浼氬Concurrent瀵硅薄鎰熷埌闄岀敓鍚э紝浠栨槸JDK 1.5浠ュ悗鏂板鐨勯噸瑕佺壒鎬т綔涓烘帉涓婅澶囷紝鎴戜滑涓嶆彁鍊′娇鐢ㄨ绫伙紝鑰冭檻鍒癆ndroid涓烘垜浠凡缁忚璁″ソ鐨凾ask鏈哄埗锛岃繖閲屼笉鍋氳繃澶氱殑璧樿堪锛岀浉鍏冲師鍥犲弬鑰冧笅闈㈢殑浠嬬粛: 6. 鍦ˋndroid涓繕鎻愪緵浜嗕竴绉嶆湁鍒簬绾跨▼鐨勫鐞嗘柟寮忥紝灏辨槸Task浠ュ強AsyncTask锛屼粠寮€婧愪唬鐮佷腑鍙互鐪嬪埌鏄拡瀵笴oncurrent鐨勫皝瑁咃紝寮€鍙戜汉鍛樺彲浠ユ柟渚跨殑澶勭悊杩欎簺寮傛浠诲姟銆?/p> 鎽樺綍鑷細http://www.android123.com.cn/androidkaifa/422.html更多相关文章
随机推荐