四种更新UI的方法

笔记:

// 使用handler.post(Runnable)更新UI
    public void updateUI_Fun1() {
        new Thread() {
            public void run() {
                Handler handler = new Handler();
                handler.post(new Runnable() {

                    @Override
                    public void run() {
                        textView.setText("this is update content");
                    }
                });
            };
        }.start();
    }

    // 使用handler发送消息更新UI
    public void updateUI_Fun2() {
        Handler handler = new Handler(new Callback() {

            @Override
            public boolean handleMessage(Message msg) {
                // 对handler发送消息的预处理,返回falst则执行下面的handlerMessage() true则不执行

                return false;
            }
        }) {
            public void handleMessage(Message msg) {
                textView.setText("this is update content");
            };
        };
    }

    // 使用UI线程更新UI
    public void updataUI_Fun3() {
        runOnUiThread(new Runnable() {

            @Override
            public void run() {
                textView.setText("updata ui content");
            }
        });
    }

    // 使用View.post( Runnable)更新UI
    public void updateUI_Fun4() {
        textView.post(new Runnable() {

            @Override
            public void run() {
                textView.setText("this is update context");

            }
        });
    }

使用子线程自带的Looper更新UI:

代码笔记:

private Handler handler2;
    private HandlerThread thread;

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

        myHandlerThread = (Button) findViewById(R.id.MyThreadHandler);
        handlerThread = (Button) findViewById(R.id.HandlerThread);

        //利用HandlerThread线程执行耗时操作,可以简单代替AsyncTask等。主线程给子线程发送消息
        handlerThread.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                thread=new HandlerThread("aaaa");
                thread.start();
                handler2=new Handler(thread.getLooper()){
                    @Override
                    public void handleMessage(Message msg) {
                        Toast.makeText(SecondActivity.this,    "this is HandlerThread", Toast.LENGTH_SHORT).show();
                    }
                };
                handler2.sendEmptyMessage(1);
            }
        });
时间: 2024-08-03 10:53:10

四种更新UI的方法的相关文章

android四种更新UI的方法

笔记: // 使用handler.post(Runnable)更新UI public void updateUI_Fun1() { new Thread() { public void run() { Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { textView.setText("this is update content"); } }); }

关于runOnUiThread()与Handler两种更新UI的方法

在Android开发过程中,常需要更新界面的UI.而更新UI是要主线程来更新的,即UI线程更新.如果在主线线程之外的线程中直接更新页面显示常会报错.抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 只有原始创建这个视图层次(view hierachy)的线程才能修改它的视图(vi

Android关于线程更新UI的方法

Android关于线程更新UI的方法 在一个Android 程序开始运行的时候,会单独启动一个Process.默认的情况下,所有这个程序中的Activity或者Service(Service和 Activity只是Android提供的Components中的两种,除此之外还有Content Provider和Broadcast Receiver)都会跑在这个Process.   一个Android 程序默认情况下也只有一个Process,但一个Process下却可以有许多个Thread.   在

android子线程中更新UI的方法

在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法: 参考:Android子线程 方法一:用Handler 1.主线程中定义Handler: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: //

四种变量交换swap方法

1.void swap(int &x, int &y){ int temp=x; x=y; y=temp; } 2.void swap(int &x, int &y){ x=x+y; y=x-y; x=x-y; } 3.void swap(int &x, int &y){ x=x-y; y=x+y; x=y-x; } 4.void swap(int &x, int &y){ x=x^y; y=x^y; x=x^y; } 四种变量交换swap方

Android在非UI线程中更新UI的方法

1.使用Thread+Handler实现非UI线程更新UI界面 private MyHandler mHandler = new MyHandler(); ...... mHandler.sendResult(MyHandler.UPDATE_VIEW, null); ...... private class MyHandler extends Handler{ private static final int UPDATE_VIEW = 0; @Override public void han

javascript四种类型识别的方法

× 目录 [1]typeof [2]instanceof [3]constructor[4]toString 前面的话 javascript有复杂的类型系统,类型识别则是基本的功能.javascript总共提供了四种类型识别的方法,本文将对这四种方法进行详细说明 typeof运算符 typeof是一元运算符,放在单个操作数的前面,返回值为表示操作数类型的首字母小写的字符串 [注意]typeof运算符后面带不带圆括号都可以 console.log(typeof 'a');//'string' co

JSP中四种传递参数的方法

jsp中四种传递参数的方法,我觉得总结一下,挺好的,以备后用! 1.form表单 2.request.setAttribute();和request.getAttribute(); 3.超链接:<a herf="index.jsp"?a=a&b=b&c=c>name</a> 1.form表单 form.jsp: <%@page contentType="text/html; charset=GB2312"%> &l

几种常见更新UI的方法

-----------------将会调用控件的onDraw()方法重新绘制控件---------------- 1.view.invalidate刷新UI(主线程)   2.view.postInvalidate刷新UI(子线程) -----------------通常只是更新控件的内容------------------------------------ 3.handler.sendMessage(Msg)更新UI 4.handler.post(Runnable)更新UI 5.view.p