Android刚学handler,不太理解,有点问题

写了一个Refresh实现Runnable,把TextView的更新操作(for循环延时更新)放进去了。

在Oncreate中,开启一个线程,把一个Refresh对象整个放在了handler中。

结果当然是错误的,但是我不懂为什么不能整个放进去。

 class Refresh implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i <= 100; i++) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                tv.setText("" + i);
            }
        }
    }

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();


   new Thread(){
       @Override
       public void run() {
           super.run();
           handler.post(new Refresh());
       }
   }.start();
}

这样改了改就可以

 class Refresh implements Runnable {
        @Override
        public void run() {
            for (int i = 0; i <= 100; i++) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                final int finalI = i;
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("" + finalI);
                    }
                });

            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();

        new Thread(new Refresh()).start();

    }

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();

new Thread(){
@Override
public void run() {
super.run();
handler.post(new Refresh());
}
}.start();
}


因为你在onCreate里面又新建了一个线程,跟Refresh 是完全独立的