- 浏览: 579750 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
hxlniada:
[color=darkred][/color][size=sm ...
利用Handler来更新android的UI -
jack_ye:
...
检测Android中触摸屏手势的动作与坐标 -
z278013421:
Android Services使用示例 -
东方vs不败:
写的不错,挺好的
利用Handler来更新android的UI -
liangxping:
就是双缓存机制而已。
Android中SurfaceView的使用示例
文字程序很简单,一个View,一个Activity,利用handler和postInvalidate()更新UI。
程序效果是一个蓝色的正方形向右移出屏幕。
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
- TestHandler.tar.gz (17.3 KB)
- 下载次数: 371
评论
2 楼
raymondlueng
2009-08-04
非常感谢您指出我理解上的错误,谢谢!我会继续努力的!
1 楼
daytodayme
2009-08-04
你的两篇文章对于invalidate()和postInvalidate()认识有些问题
http://www.iteye.com/topic/435147
http://rayleung.iteye.com/blog/411860
调用Handler.post(Runnable r)方法,Runnable运行在UI所在线程,所以可以直接调用View.invalidate()
在新线程里更新UI,可以直接postInvalidate()
http://www.iteye.com/topic/435147
http://rayleung.iteye.com/blog/411860
调用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(); } } } }
发表评论
-
类似Chome的翻转效果
2012-09-18 23:14 2411简单的demo,屏幕上下滑动翻转View,类似Android ... -
3D编程基础数学之旋转及在Android中的应用
2012-02-10 00:11 0最近因为兴趣,看了一些3D编程的书,有种感觉就是写这些书的作者 ... -
Android中屏幕Density对BitmapDrawable的影响
2011-07-08 21:44 7903很早之前写的文章了,发在这里记录一下。 在之前的 ... -
Android程序与Javascript的交换
2010-04-16 21:40 0hello! -
Android Services使用示例
2010-01-12 16:50 14141Android开发中,当需要创建在后台运行的程序的时候,就要 ... -
Android游戏开发之服务器端
2010-01-09 16:38 6719首先我不知道这篇文章发到Android开发板块是否适合的,因为 ... -
Android ListView常用用法
2009-12-03 20:56 36747ListView是比较常用的控件,但一直都觉得创建ListVi ... -
Android View添加 Listener 小技巧示例
2009-12-02 15:35 9871在开发中为控件添加Listener是非常常见的工作,最简单的添 ... -
Android Gesture 手势识别使用实例
2009-10-20 11:56 10215很高兴能在Android1.6的sdk看到手势识别这一 ... -
Android第二个游戏 DragonFeed(勇者喂恶龙)
2009-10-12 17:57 8117这是参加学校一个小比赛的参赛游戏,之前一直在忙 认证考试和项目 ... -
Android 震动示例--心跳效果
2009-10-02 23:58 7717正在开发第二个游戏,计时就要结束的时候,为了营造紧张的气氛, ... -
Android adb的使用略解
2009-09-30 16:08 40287安卓网的一个帖子,写得不错,记下来 ADB全称Android ... -
Android游戏开发之连连看算法
2009-09-29 00:36 10479因为有朋友在站内信中问到连连看的具体算法,所以我就把算法pos ... -
android游戏开发之选关画面
2009-09-21 15:44 4055在游戏开发中,往往要提供选关的页面,选择关卡可以简单地使用li ... -
Android重力感应Demo
2009-09-11 23:33 14080android中的很多游戏的游戏都使用了重力感应的技术,但其a ... -
Android游戏开发之爆炸效果
2009-09-02 00:29 18550在做Android游戏MagicBubble开发的时候 ... -
Android 的第一个游戏
2009-08-18 08:48 8019学了android1个多月,做了一款连连看游戏,上了andro ... -
Android canvas的save()和restore()用法
2009-08-05 12:21 19928在读Android SDK里面的samples里面游戏的时候, ... -
Android 2d物理引擎Box2d的使用示例
2009-08-04 09:06 14298Box2d是一个很出名的2d物理引擎,大家可以google之。 ... -
android布局学习利器-Hierarchy Viewer
2009-07-27 18:17 8148Hierarchy Viewer 帮你分析应用程序UI布局 ...
相关推荐
另一种常见的方式是在子线程中创建一个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更新,因此当需要在后台线程...