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");
                    }
                });
            };
        }.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-12-22 01:34:34

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

四种更新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"); } }); }

Android关于线程更新UI的方法

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

关于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主线程方法之Handler

背景: 我们开发应用程序的时候,处于线程安全的原因子线程通常是不能直接更新主线程(UI线程)中的UI元素的,那么在Android开发中有几种方法解决这个问题,其中方法之一就是利用Handler处理的. 下面说下有关Handler相关的知识. 多线程一些基础知识回顾:在介绍Handler类相关知识之前,我们先看看在Java中是如何创建多线程的方法有两种:通过继承Thread类,重写Run方法来实现通过继承接口Runnable实现多线程 具体两者的区别与实现,看看这篇文章中的介绍:http://de

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: //

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

android中子线程更新UI的方式浅析

一.为何写作此文 ??你是不是经常看到很多书籍中说:不能在子线程中操作ui,不然会报错.你是不是也遇到了如下的疑惑(见下面的代码): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); Threa

Android 四种点击监听方式

Android点击监听事件经常用到,经常用到的有以下几种 第一种:最常用到的,通过实现OnClickListen,实现OnClick方法去实现 public class MainActivity extends Activity implements OnClickListener // 用实现接口的方式实现点击 button1 = (Button) findViewById(R.id.button1); button1.setOnClickListener(this); @Override p

android四种动画

http://www.jb51.net/article/32339.htm android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解ScaleAnimation 动画, ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType,