第一种解决方案是:
class UIUpdateThread implements Runnable{
public void run() {
try {
Thread.sleep(1000*5);
mHandler.post(mUpdateResults);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
final Handler mHandler = new Handler();
final Runnable mUpdateResults = new Runnable() {
public void run() {
invalidate(); //更新视图
}
};
}
第二种:
class GameThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// 使用postInvalidate可以直接在线程中更新界面
mGameView.postInvalidate();
}
}
}
分享到:
相关推荐
Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。 利用Handler刷新界面 实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面...
`Invalidate`和`postInvalidate`是Android提供的两种主要的View刷新机制,它们虽然都能达到更新界面的效果,但在使用场景和执行机制上有所区别。 首先,`Invalidate`方法是直接在UI线程中调用的。当调用一个View的`...
本文将详细介绍两种在Android中在线程中刷新界面的方法:Handler和postInvalidate()。 1. 利用Handler刷新界面 Handler是Android中用于线程间通信的重要工具,它允许你在后台线程发送消息到主线程,并在主线程中...
在 Android 中,界面的刷新可以通过多种方式实现,本文将分享两种常见的 Android 界面刷新方法:利用 Handler 和利用 postInvalidate()。 利用 Handler 刷新界面 在 Android 中,UI 操作并不是线程安全的,这意味...
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。 invalidate()是用来刷新View...
2. `postInvalidate()`: 如果你需要在非UI线程中更新界面,可以使用`postInvalidate()`,它会在UI线程的下一次事件循环中调用`invalidate()`,确保安全地更新界面。 3. `onDraw()`: 当View需要重新绘制时,系统会...
在Android开发中,`Invalidate`是一个至关重要的概念,它涉及到UI更新机制,与用户界面的刷新和重绘紧密相关。当我们对一个View调用`invalidate()`方法时,实际上是触发了该View的重新绘制过程。这个过程涉及到多个...
`invalidate()`的内部实现会调用`postInvalidate()`,如果当前View不在UI线程,`postInvalidate()`会将其加入到消息队列中,等待主线程处理。而在主线程中,`invalidate()`会直接触发`draw()`方法,从而启动绘制流程...
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。 Android程序中可以使用的界面刷新...
当你调用`View`的`postInvalidate()`或`invalidate()`方法时,会触发一个消息,这个消息会在主线程的消息队列中排队,然后在下一个合适的时刻执行实际的重绘操作。 相比之下,`SurfaceView`有自己的`SurfaceHolder`...
当界面需要更新时,应调用`View`的`invalidate()`或`postInvalidate()`方法,这会将一个消息放入队列,由主线程的`Looper`取出并执行`onDraw()`。 6. **性能优化**: 自定义表格时要考虑性能问题,比如使用`...
同时,还可以利用`postInvalidate()`或`invalidate()`异步刷新界面,避免阻塞主线程。 为了优化UI性能,开发者可以采用一些策略,比如使用`ViewStub`延迟加载不立即显示的View,减少无效的绘制;使用`RecyclerView`...
`Invalidate()`或`postInvalidate()`方法用于告诉Android系统View需要更新其显示内容。在自定义View中,我们需要在`onDraw()`方法中正确地处理这些新的数据,并根据数据的变化重新绘制文字。 文件名中的“自定义...
避免在`onTouchEvent`中执行耗时的操作,考虑使用`postInvalidate()`异步刷新界面,而不是立即调用`invalidate()`。 8. **兼容性测试**: 确保自定义拖动控件在不同设备和Android版本上表现一致,进行广泛的设备和...
在Android开发中,View刷新机制是至关重要的一个环节,它涉及到UI界面的更新与渲染。本文将通过实例分析,深入探讨Android View的刷新机制,包括其功能、原理以及实际应用中的使用技巧。 首先,我们来看一下总体...
在Android中,Invalidate方法和postInvalidate方法都是用来刷新界面的,但是它们之间有着很大的区别。Invalidate方法只能在UI线程中调用,而postInvalidate方法可以在工作线程中调用。因此,在使用postInvalidate...
这两个方法都是用来刷新视图的,`postInvalidate()`会在UI线程的下一个循环中执行,而`invalidate()`会立即执行,但考虑到性能优化,通常推荐使用`postInvalidate()`。 为了防止搬运工走出游戏区域,我们需要在处理...