文字程序很简单,一个View,一个Activity,利用handler和postInvalidate()更新UI。
程序效果是一个蓝色的正方形向右移出屏幕。
Java代码
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(update);
setContentView(myView);
}
private Runnable update = new Runnable() {
public void run() {
myView.update();
mHandler.postDelayed(update, 5);
}
};
class MyView extends View{
private float x = 0f;
public MyView(Context context) {
super(context);
}
public void update(){
postInvalidate();
}
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);
}
}
}
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(update);
setContentView(myView);
}
private Runnable update = new Runnable() {
public void run() {
myView.update();
mHandler.postDelayed(update, 5);
}
};
class MyView extends View{
private float x = 0f;
public MyView(Context context) {
super(context);
}
public void update(){
postInvalidate();
}
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);
}
}
} 之前还写过另外一篇关于Handler更新UI的文章:
http://rayleung.iteye.com/blog/411860
分享到:
相关推荐
另一种常见的方式是在子线程中创建一个Runnable对象,然后在主线程中调用Activity的runOnUiThread()方法来执行这个Runnable。runOnUiThread()会确保Runnable中的代码在UI线程中运行,所以可以直接进行UI更新。这种...
另一个使用`postInvalidate()`的例子是在子线程中更新UI: ```java new Thread(new myThread()).start(); class myThread implements Runnable { public void run() { while (!Thread.currentThread()....
2. **AsyncTask**:另一种常见的实现方式是使用AsyncTask,它是一个轻量级的异步任务类,特别适合于短时间的后台操作和UI更新。不过,由于AsyncTask的限制(如任务数量限制),在处理大量或持续的后台任务时,它可能...
首先,创建一个Handler实例,并重写handleMessage()方法,这里会处理从另一个Activity发送过来的消息。例如: ```java public class SenderActivity extends AppCompatActivity { private Handler mHandler = new ...
**Handler** 和 **Message** 机制是另一种异步处理方式,适用于更复杂的异步通信场景。Handler通常在UI线程中创建,用于接收和处理由其他线程发送的消息。Message对象用于承载数据,而Handler的`sendMessage()`和`...
就是另一个线程发送一个编号给消息所在的线程,那么该线程的消息处理程序就会收到该消息并进行处理,而消息采用int类型,所以int能够表示多少种数字就以为着有多少消息可以给你使用。这里是一个简单的HandlerDemo。
`postInvalidate()`方法是另一种在非UI线程中刷新界面的方式。它会把刷新任务放入UI线程的消息队列,待UI线程空闲时执行。这种方法比Handler更简洁,因为不需要创建额外的Message对象和处理逻辑。下面是一个使用`...
如果两个Activity共享同一个Handler,那么一个Activity可以通过发送消息给Handler,由Handler在正确的线程(通常是主线程)中执行更新UI的操作,从而达到间接修改另一个Activity内容的目的。但是,这种做法并不常见...
3. 使用runOnUiThread():另一种方式是在子线程中调用Activity的runOnUiThread()方法。这个方法会把传入的Runnable放到主线程的事件队列中,确保在主线程中执行。 4. 使用AsyncTask:AsyncTask是Android提供的一种...
`AsyncTask`是另一种异步处理方式,但它内部也使用了`Handler`。 6. **Handler的内存泄漏问题** 不当使用`Handler`可能导致内存泄漏,尤其是当Activity与`Handler`之间的引用没有正确断开时。为防止这种情况,可以...
`Looper`是Android消息系统的另一个核心组件,它在一个线程中运行一个无限循环,不断地从消息队列中取出消息并分发给相应的`Handler`进行处理。默认情况下,Android主线程(UI线程)已经有一个`Looper`在运行,而在...
Android Handler机制是Android系统中的一种机制,用于处理线程之间的通信和消息传递。在Android系统中,Handler机制是基于Java的线程机制来实现的。下面将对Android Handler机制进行详细的解析。 一、线程概念 在...
在Android开发中,**Handler**是一种非常重要的消息处理机制,主要用于解决线程间通信的问题。它使得开发者可以在一个线程中发送消息或运行任务,并在另一个线程中处理这些消息或任务。这种机制非常适合用于执行耗时...
这是另一种直接在UI线程执行代码的方式。在后台线程中调用runOnUiThread,传入一个Runnable对象,该对象的run方法将在主线程中执行。这种方法简洁明了,适合快速实现简单的UI更新。例如,可以在后台线程中调用...
另一方面,`Thread`配合`Handler`是一种更底层的异步处理方式。开发者需要手动创建`Thread`,并在其中执行耗时操作。当需要更新UI时,通过`Handler`发送一个Message或者Runnable到主线程的消息队列。这种方式更加...
另一种策略是通过`postDelayed()`方法来避免Handler持有Activity的强引用。通过在`Runnable`对象中处理UI更新,当任务执行完毕后,`Runnable`对象可以被垃圾回收,因为此时它不再有任何引用。例如: ```java ...
6. **Handler和Message**:另一种处理异步操作的方法是使用Handler和Message。在后台线程执行任务,然后通过发送Message到主线程的Handler来更新UI,同时显示或隐藏等待界面。 7. **LiveData and ViewModel**:在...
`Callback`接口提供了另一种处理消息的方式,用户可以通过实现这个接口来自定义消息处理逻辑。 `Handler`发送消息使用`sendMessage`或`post`等方法,接收消息则由`Looper`调度,`Handler`的`dispatchMessage`方法将...
另一种可能是使用云数据库如Firebase Realtime Database或Firestore。 6. **Android UI设计原则**:开发者需要遵循Material Design指南,这是Google为Android设计的一套系统,包括颜色、图标、动画和交互等方面的...
Message,另一方面,是Android Handler机制中的一个重要组成部分。Handler主要用于线程间通信,尤其是主线程(UI线程)与其他工作线程之间的通信。在Android中,主线程负责处理所有的UI更新,因此当需要在后台线程...