android studio handler

handler用来更新ui,同时封装了消息传递机制。

不使用handler,而新建线程,是会引起错误的:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textView=(TextView)findViewById(R.id.text);
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(1000);
                    textView.setText("hi");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}
原因是不能在非ui线程中更新ui。

使用handler:

public class MainActivity extends AppCompatActivity {
    private Handler handler=new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textView=(TextView)findViewById(R.id.text);
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(1000);
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText("hi");
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }
}
handler实现图片轮播:

public class MainActivity extends AppCompatActivity {
    private Handler handler=new Handler();
    private ImageView imageView;
    private int[] images={R.drawable.x,R.drawable.y,R.drawable.z};
    private int index=0;

    class RN implements Runnable{
        @Override
        public void run() {
            index++;
            System.out.println(index);
            index=index%3;
            imageView.setImageResource(images[index]);
            handler.postDelayed(new RN(),1000);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final TextView textView=(TextView)findViewById(R.id.text);
        imageView=(ImageView)findViewById(R.id.image);
        handler.postDelayed(new RN(),1000);
    }
}
传递message:

public class MainActivity extends AppCompatActivity {
    private Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            textView.setText(""+msg.arg1+"/"+msg.arg2+"/"+msg.obj);
        }
    };
    private TextView textView;
    private ImageView imageView;
    private int[] img={R.drawable.x,R.drawable.y,R.drawable.z};
    private int index;
    private myRunnable runnable=new myRunnable();
    class myRunnable implements Runnable{
        @Override
        public void run() {
            index++;
            index=index%3;
            imageView.setImageResource(img[index]);
            handler.postDelayed(runnable,1000);
        }
    }
    class Person{
        public int age;
        public String name;

        @Override
        public String toString() {
            return "Person{" +
                    "age=" + age +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=(TextView)findViewById(R.id.text);
        imageView=(ImageView)findViewById(R.id.image);
        handler.postDelayed(runnable,1000);
        new Thread(){
            @Override
            public void run() {
                super.run();
                try {
                    Thread.sleep(1000);
                    Message message=new Message();
                    message.arg1=0;
                    message.arg2=100;
                    Person person=new Person();
                    person.age=20;
                    person.name="hehe";
                    message.obj=person;
                    handler.sendMessage(message);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

}
threadhandler:
public class Main2Activity extends AppCompatActivity {
    private HandlerThread thread;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        thread=new HandlerThread("handler thread");
        thread.start();
        Handler handler=new Handler(thread.getLooper()){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                System.out.println("thread----"+Thread.currentThread());
            }
        };
        handler.sendEmptyMessage(1);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值