Android之 Handler

在看progressbar的API文档时有如下例子,在新线程中更新progress值,然后post到handler一个runnable来更新UI,这是为什么呢?

  mHandler.post(new Runnable() {
       public void run() {
       mProgress.setProgress(mProgressStatus);
       }
   });

Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。常用的方法是利用Handler来实现UI线程的更新的

public class MyActivity extends Activity {
    private static final int PROGRESS = 0x1;

    private ProgressBar mProgress;
    private int mProgressStatus = 0;

    private Handler mHandler = new Handler();

    protected void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setContentView(R.layout.progressbar_activity);

        mProgress = (ProgressBar) findViewById(R.id.progress_bar);

        // Start lengthy operation in a background thread
        new Thread(new Runnable() {
            public void run() {
                while (mProgressStatus < 100) {
                    mProgressStatus = doWork();

                    // Update the progress bar
                    mHandler.post(new Runnable() {
                        public void run() {
                            mProgress.setProgress(mProgressStatus);
                        }
                    });
                }
            }
        }).start();
    }
}
    原文作者:大明白
    原文地址: https://www.jianshu.com/p/ce8a67584e44
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞