使用Handler更新UI

2019-04-08  本文已影响0人  PeterWu丷
public class MainActivity extends AppCompatActivity {

    private  Button btnMain;
    private MyHandler myHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        myHandler = new MyHandler(this);
        initView();
        initListener();
    }

    private void initListener() {
        btnMain.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Executors.newCachedThreadPool().execute(new Runnable() {
                    @Override
                    public void run() {
                        Message message = Message.obtain();
                        message.what = 1;
                        myHandler.sendMessage(message);
                    }
                });
            }
        });
    }

    private void initView() {
        btnMain = findViewById(R.id.btn_main);
    }

    //自定义Handler,设置为静态内部类,不持有外部类的使用
    private static class MyHandler extends Handler{
        //添加弱引用持有Activity实例,这样无论内存是否足够都会回收Activity
        private WeakReference<Activity> reference;
        //私有构造
        private MyHandler(Activity activity){
            reference = new WeakReference<>(activity);
        }

        @SuppressLint("SetTextI18n")
        @Override
        public void handleMessage(Message msg) {
            //使用Activity弱引用的对象获取控件,首先对弱引用的对象进行判空
            if (reference.get() != null) {
                MainActivity mainActivity = (MainActivity) reference.get();
                Button btnMain = mainActivity.findViewById(R.id.btn_main);
                if (msg.what == 1){
                    btnMain.setText("更新ui成功");
                }
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读