Android之 Handler

作者: 大明白 | 来源:发表于2014-12-31 18:58 被阅读194次

    在看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();
        }
    }

    相关文章

      网友评论

        本文标题:Android之 Handler

        本文链接:https://www.haomeiwen.com/subject/ctgntttx.html