子线程更新主线程UI操作的几种方法:

//定义handler    static final int SUCCESS = 1;    static final int FAIL = 0;    Handler handler = new Handler() {        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what) {                case SUCCESS:                    Toast.makeText(MyActivity.this, msg.getData().get("msg").toString(), Toast.LENGTH_SHORT).show();                    break;                case FAIL:                    Toast.makeText(MyActivity.this, msg.getData().get("msg").toString(), Toast.LENGTH_SHORT).show();                    break;                default:                    super.handleMessage(msg);            }        }    };    //方法一:通过handler.sendMessage,更新UI主线程    private void makeToastByHandlerSendMessage(String msgStr) {        Message msg = new Message();        msg.what = 0;        Bundle bundle = new Bundle();        bundle.putString("msg", msgStr);        msg.setData(bundle);        handler.sendMessage(msg);    }    //方法二:通过handler.post,更新UI主线程    private void makeToastByHandlerPost(final String msg) {        handler.post(new Runnable() {            @Override            public void run() {                Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();            }        });    }    //方法三:通过handler.post,延迟seconds秒后更新UI主线程    private void makeToastByHandlerPostDelay(final String msg, int seconds) {        handler.postDelayed(new Runnable() {            @Override            public void run() {                Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();            }        }, seconds * 1000);    }    //方法四:使用runOnUiThread,更新UI主线程    private void makeToastByRunOnUiThread(final String msg) {        MyActivity.this.runOnUiThread(new Runnable() {            @Override            public void run() {                Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();            }        });    }    //方法五:通过view.post,更新UI主线程    private void makeToatByViewPost(View view, final String msg) {        view.post(new Runnable() {            @Override            public void run() {                Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();            }        });    }    //方法六:通过AsyncTask,更新UI主线程    private void makeToastByAysncTask(final String msg) {        AsyncTask asyncTask = new AsyncTask() {            @Override            protected Object doInBackground(Object[] params) {                return null;            }            @Override            protected void onPostExecute(Object o) {                super.onPostExecute(o);                Toast.makeText(MyActivity.this, msg, Toast.LENGTH_SHORT).show();            }            @Override            protected void onProgressUpdate(Object[] values) {                super.onProgressUpdate(values);            }        };        asyncTask.execute();    }

使用方法: 

//1、Handler.SendMessagemakeToastByHandlerSendMessage(msg);//2、Handler.PostmakeToastByHandlerPost(msg);//3、Handler.PostDelaymakeToastByHandlerPostDelay(msg,1);//4、context.RunOnUiThreadmakeToastByRunOnUiThread(msg);//5、View.PostmakeToatByViewPost(btnLogin,msg);//6、AysncTaskmakeToastByAysncTask(msg);

 其实通过查看源代码,发现非handler的实现方法最终还是通过handler来实现的。

MyActivity.this.runOnUiThread(new Runnable() {});view.post(new Runnable());// 以上两个方法最终都调用handler的sendMessageDelayed方法public final boolean sendMessageDelayed(Message msg, long delayMillis)

 

更多相关文章

  1. android 判断当前线程是不是主线程的几种方法
  2. Android httpClient Get&Post方法
  3. Android 给textview添加下划线的一种方法(可复用)
  4. Android中两种实现倒计时的方法
  5. Android获取系统内核版本的方法
  6. Android Studio执行Java类的main方法及解决方法
  7. Android 延迟执行方法

随机推荐

  1. 导入地址簿联系人,存储在数组中并保存到数
  2. 绑定和解除相同javascript函数的目的是什
  3. jquery不会对select/选项更改事件作出反
  4. jquery ajax和php实现返回值 json类型
  5. 使用jquery post发布PHP文件
  6. 如何使用jQuery增加字体大小的变化?
  7. 将CSS样式转换成JS变量?
  8. JQuery 的选取元素 和 方法
  9. 使用json将发送请求发送到RESTful WCF
  10. 求ext动态树(asp.net+jquery+ajax+sql2008