runOnUiThread简单应用

来源:互联网 发布:发音标准的软件 编辑:程序博客网 时间:2024/05/16 12:14

首先runOnUiThread是Activity内部的方法,在运用的时候最好指明当前环境变(Context).

new Thread(new Runnable() {

   @Override
   public void run() {
    System.out.println(Thread.currentThread().getId());
    runOnUiThread(new Runnable() {

     @Override
     public void run() {
      Toast.makeText(RunOnUIThreadActivity.this, "UI操作...", 1000).show(); 
     }
    });
   }

  }).start();

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
        new Thread(new Runnable() {

      @Override
      public void run() {
       if(isClose)
        return;
       if(i!=0)
       Toast.makeText(RunOnUIThreadActivity.this, i+"", 1000).show(); 
       i++;
       handler.postDelayed(this, 2000);
      }

     }).start(); 
       }

上面两个其实原理一样,runOnUiThread这个会调用父类中的

public final void runOnUiThread(Runnable action) {
        if (Thread.currentThread() != mUiThread) {
            mHandler.post(action);
        } else {
            action.run();
        }
    }

首先判断是否是UI线程,不是的话就post,如果是的话就正常运行该线程.

只要经过主线程中的Handler.post或者postDelayed处理线程runnable则都可以将其转为UI主线程.再说Handler的机制就是来处理线程与UI通讯的.

new Thread() {    @Override    public void run() {        super.run();        for (File folder : folders) {            File[] files = folder.listFiles();            for (File file : files) {                if (file.getName().endsWith(".png")) {                    final Bitmap bitmap = getBitmapFromFile(file);                    getActivity().runOnUiThread(new Runnable() {                        @Override                        public void run() {                            imageCollectorView.addImage(bitmap);                        }                    });                }            }        }    }}.start();


0 0
原创粉丝点击