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