Android中Handler小例子

wgd7 9年前發布 | 1K 次閱讀 Java Android

     在Android中,如果你的應用有一段時間響應不夠靈敏,系統會向用戶顯示一個稱作為應用程序無響應(ANR:Application Not Responding)對話框。用戶可以選擇“等待”而讓程序繼續運行,也可以選擇“強制關閉”。一個合理的APP中不能也不應該出現ANR。導致原因就是安卓UI主線程中不能進行耗時操作(網絡請求,文件下載等),比如在android中Activity的最長執行時間是5秒,BroadcastReceiver的最長執行時間則是10秒,否則ANR就會不期而遇。這時我們就要用到異步處理工具。Handler主要是按計劃發送消息或執行某個Runnanble,從非UI線程中發送來的消息放入消息隊列中,然后通過處理消息更新UI線程)。

例子1,用Handler來更新UI線程:


public class HandlerActivity extends Activity {
public static final int HANDLER_MESSAGE = 1;
private TextView mContentTv;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case HANDLER_MESSAGE:
mContentTv.setText("此時更新了數據");
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContentTv=(TextView) findViewById(R.id.t_title);
}
class myThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = HANDLER_MESSAGE;
mHandler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
}


例子1,用Handler來完成定時(周期性)操作(當然可以用Timer,TimerTask及Android自帶的AlarmManage):

public class HandlerActivity extends Activity {
private TextView mContentTv;
private Handler handler = new Handler();
private int mCounter = 0;
private Runnable mRunnable = new Runnable() {
public void run() {
handler.postDelayed(this, 5000);// 5秒后操作
mCounter++;
mContentTv.setText("Count: " + mCounter);

} };

@Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContentTv = (TextView) findViewById(R.id.t_title); handler.post(mRunnable); } }</pre>

 本文由用戶 wgd7 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!