Android UI组件的动态更新

本文探讨了Android中UI动态更新的三种方法:Handler+Thread、post+Thread以及AsyncTask。强调了UI线程不应执行耗时操作以避免ANR异常,并分别通过示例代码介绍了三种方式如何在新线程中处理耗时任务并更新UI。最后,建议使用AsyncTask,因为它更简洁且易于实现。
摘要由CSDN通过智能技术生成

        Android的程序启动时,会同时启动一条主线程,又称为UI线程,主要负责UI相关的操作,包括:按键事件、触屏事件以及屏幕绘图事件等等。UI线程应该尽量避免耗时操作,否则将出现著名的ANR异常(Application Not Reponse)。

        但是,有时候需要实现UI的动态更新,而更新操作可能又是耗时的。此时,耗时操作则必须放在新线程里进行。下面以一个简单例子,讨论一下UI动态更新的方法。

一、Handler + Thread

直接上代码

package com.dale.uiupdate;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;


public class MainActivity extends Activity {
	
	ImageView mIv;
	
	
	Handler mHandler1 = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            mIv.getDrawable().setLevel(msg.what);
        }        
    };
    
    class Thread1 extends Thread {

        @Override
        public void run() {
            try {
                for(int i=0; i!=10; i++) {
                    mHandler1.sendEmptyMessage(i%3);
                    sleep(1000);
                } 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        mIv = (ImageView) findViewById(R.id.iv);
        //通过新开线程发送消息给Handler,由Handler来更新当前UI状态
        new Thread1().start();
    }

}

界面布局时分简单,仅一个ImageView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值