调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
package com.ray.test;
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 TestHandler extends Activity {
private MyView myView;
private Handler mHandler;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
mHandler = new Handler();
mHandler.post(new Runnable(){
@Override
public void run() {
myView.invalidate();
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);
}
}
}
在新线程里更新UI,可以直接postInvalidate()
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
myView = new MyView(this);
this.setContentView(this.myView);
new Thread(new myThread()).start();
}
class myThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
myView.postInvalidate();
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
|
|
http://www.iteye.com/topic/435147#1116657
分享到:
相关推荐
在C#编程中,特别是在开发桌面应用程序(如WinForms或WPF)时,经常会遇到需要在子线程中更新UI控件的情况。由于UI界面通常运行在主线程中,为保证用户界面的响应性和避免线程冲突,我们需要遵循特定的规则来安全地...
为了解决这个问题,WPF引入了多线程技术,允许开发者在后台线程处理耗时任务,然后通过特定的方式安全地更新UI。 标题“WPF 使用线程更新UI”主要涉及到以下几个关键知识点: 1. **后台线程与主线程**:主线程是...
由于Android系统的安全机制,直接在子线程中修改UI是不允许的,因此我们需要通过特定的方式来实现子线程与UI线程之间的通信,以便在子线程完成任务后,能够安全地更新UI。`AndroidUIUpDemo`这个项目应该是一个展示...
为了解决这个问题,WPF引入了`Dispatcher`机制,允许后台线程安全地更新UI。 `Dispatcher`是WPF中的一个关键概念,它是线程调度器,负责协调不同线程对UI元素的操作。当后台线程需要修改UI时,必须通过`Dispatcher`...
特别是在UI(用户界面)开发中,为了保证界面的流畅性,通常我们会将耗时操作放在后台线程进行,而更新UI则需要在主线程(也称为UI线程)中完成。这是因为UI控件不是线程安全的,多个线程并发访问可能导致数据不一致...
为了解决这个问题,我们可以将这些操作放在子线程中执行,然后通过特定机制更新UI。以下是对这个主题的详细说明: 1. **线程基础知识**:在多线程编程中,线程是程序中的执行单元。主线程主要负责处理UI交互,而子...
"Android广播onReceiver回调更新ui"这个主题主要涉及如何在广播接收器中处理接收到的广播消息,并在用户界面(UI)上做出相应的更新。我们将深入探讨以下几个关键知识点: 1. **广播机制**: Android系统通过发送...
本文将详细讲解如何在WinForm应用中实现多线程异步更新UI。 1. **线程基础知识**:在Windows操作系统中,每个应用程序都有一条主线程,负责创建和管理UI。其他线程称为工作线程,用于执行非UI相关的任务。主线程与...
在某些情况下,我们可能需要一个Service去执行一些任务,并在任务完成后更新UI。这时,我们可以利用Android的Binder机制中的Messenger来实现这种跨进程通信(IPC,Inter-Process Communication)。本篇将详细介绍...
在Android开发中,更新UI是常见的操作,尤其是在需要实时显示数据变化或动画效果时。本文将详细介绍四种在Android中实现1秒间隔更新UI的方法。这四种方法分别是:Handler、Runnable、TimerTask和CountDownTimer。每...
当后台线程需要更新UI时,首先创建一个Delegate,然后调用控件的Invoke方法,这样可以确保在UI线程中安全地执行更新操作。 示例代码: ```csharp private delegate void UpdateTextDelegate(string text); ...
在Android开发中,更新UI(用户界面)是常见的任务,特别是在多线程环境中,为了保持UI的流畅性,我们需要在正确的线程中执行更新操作。本篇将详细讲解标题所提及的四种Android更新UI的方法,并结合描述中的"handler...
本教程将重点讲解如何使用Handler机制来实现在后台线程中执行任务并在主线程中更新UI。 Handler是Android中一种用于线程间通信的重要工具,它允许你在不同的线程之间发送和处理消息。Handler的运作机制基于Message...
本文将深入探讨“用多线程更新UI”这一主题,重点关注C#语言下如何通过多线程避免UI访问冲突,提高程序响应速度。 首先,我们需要理解为什么需要在UI线程以外的线程进行更新。当UI操作(如添加控件、改变文本或刷新...
以下将详细讲解三种在子线程中更新UI线程的方法,特别是Handler的两种用法。 1. Handler+Looper Handler是Android中用于消息传递的关键组件,它与Looper配合使用,可以在不同线程之间传递消息。首先,我们需要在...
本文将深入探讨“Android Handler定时更新UI”的相关知识点,以及如何使用CounterDemo来实现这一功能。 首先,我们需要理解Android的线程模型。Android应用的主要执行线程被称为“主线程”或“UI线程”,它负责处理...
为了解决这个问题,Android提供了多种异步处理机制,其中一种常见的方式是使用`Thread`配合`Handler`来实现非UI线程执行耗时任务并更新UI。本篇将详细介绍这一方法。 首先,我们需要理解Android的线程模型。Android...
在Xamarin.Android开发中,非UI线程更新UI是一个常见的需求,但同时也涉及到线程安全问题。本篇文章将深入探讨如何在Xamarin.Android环境中正确地从非UI线程(也称为后台线程)更新用户界面。 首先,我们需要理解...
总的来说,通过Android AIDL实现跨进程更新UI,我们需要定义AIDL接口,实现接口服务端,启动并绑定服务,然后在服务端安全地更新UI。这个过程涉及到Android的多进程通信、Binder机制以及线程同步等核心知识点,对于...
在.NET中,我们有两种主要的方式来实现后台任务并更新UI:BackgroundWorker组件和直接使用Thread。接下来,我们将详细探讨这两种方法及其特点。 **BackgroundWorker组件** BackgroundWorker是.NET Framework提供的...