androidrunnable使用_android handler.post(Runnable)

本文详细介绍了Android中Handler如何与View进行交互以实现UI更新。通过创建Handler并使用post方法,可以在主线程中定时更新组件,避免了线程同步问题。在run方法中调用View的invalidate()方法,触发重绘过程,实现了每隔5毫秒更新一次UI的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.android;

import android.app.Activity;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

public class TestActivity extends Activity {

private MyView myView;

private Handler mHandler;

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

myView = new MyView(this);

// 创建一个Handler

mHandler = new Handler();

// 调用Handler.post(Runnable r)方法

mHandler.post(new Runnable() {

//   mHandler.post(Runnable) 中的Runnable 会在mHandler 所在的线程执行, 也就是View 所在的UI线程

//   handler并没有新开一个线程啊 只是把runnable放进去而已

//   这样就可以跟handler都在主线程中 然后就可以更新ui了

//   while是保证隔一定时间就放一个runnable进入

//   我们可以通过调用handler的post方法,

//   把Runnable对象(一般是Runnable的子类)传过去;

//   handler会在looper中调用这个Runnable的Run方法执行。

//   Runnable没有启动(线程的启动是用start()来启动的)

public void run() {

// 直接调用View.invalidate(),更新组件

myView.invalidate();

// 延迟5毫秒后执行线程

mHandler.postDelayed(this, 5);

}

});

setContentView(myView);

}

class MyView extends View {

private float x = 0f;

public MyView(Context context) {

super(context);

}

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

x += 1;

Paint mPaint = new Paint();

mPaint.setColor(Color.BLUE);

canvas.drawRect(x, 40, x + 40, 80, mPaint);

}

}

}

分享到:

2012-05-23 20:22

浏览 15790

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值