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();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在上一篇的文章中,我们提到了在子线程中是无法对UI界面进行更新的。那么为啥android中无法在子线程中队UI进行...
    朴勋l阅读 4,084评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,924评论 25 708
  • Handler设计初衷:处于性能的考虑,android的UI线程不是操作安全的,这就意味着如果多个线程同时操作UI...
    王小冬阅读 512评论 0 3
  • 自写歌词,借《青花瓷》曲。 烽火再起撼天下诸侯举狼烟 蛟龙腾云舞鳞爪觊觎惊天变 你穿银袍披金甲昂然自东现 抬眼间飞...
    逆行的水星阅读 453评论 1 7
  • 今天参加会议,业务人员由于疏忽把单据上的两行数字填反,导致船期延误,造成巨大的经济损失,除此之外,给客户留下不好的...
    珊珊_812c阅读 2,477评论 1 4