当前位置:首页 » 安卓系统 » androidinvalidate

androidinvalidate

发布时间: 2023-01-29 08:20:23

A. android中Invalidate和postInvalidate的区别

Invalidate和postInvalidate和requestLayout都是用来刷新view控件的:
主线程可以直接调用Invalidate()方法刷新。
子线程可以直接调用postInvalidate()方法刷新。
API的描述是这样的 : Invalidatethe whole view. If the view is visible, onDraw(Canvas) will be called at somepoint in the future. This must be called from a UI thread. To call from anon-UI thread, call postInvalidate().。当Invalidate()被调用的时候,View的OnDraw()就会被调用,Invalidate()必须是在UI线程中被调用,如果在新线程中更新视图的就调用postInvalidate()。

B. android中Invalidate和postInvalidate的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程中使用刷新页面,postInvalidate可以在子线程刷新页面。

分析postInvalidate源码,可以看出postInvalidate是把方法推送到主线程执行:
public void postInvalidateDelayed(long delayMilliseconds) {
if (mAttachInfo != null) {
Message msg = Message.obtain();
msg.what = AttachInfo.INVALIDATE_MSG;
msg.obj = this;
mAttachInfo.mHandler.sendMessageDelayed(msg, delayMilliseconds);
}
}

所以得出结论,postInvalidate和invalidate的区别是,invalidate只能运行在主线程,而 postInvalidate可以运行在子线程。

C. android开发中 invalidate()方法是不是有自动清除上一次画面的功能在线等

invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。

D. android 中Bn 和Bp的区别

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。

Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。

1,利用invalidate()刷新界面
实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。

// 在onCreate()中开启线程

new Thread(new GameThread()).start();、

// 实例化一个handler

Handler myHandler = new Handler() {
// 接收到消息后处理
public void handleMessage(Message msg) {
switch (msg.what) {
case Activity01.REFRESH:
mGameView.invalidate(); // 刷新界面
break;
}

super.handleMessage(msg);
}
};

class GameThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = Activity01.REFRESH;
// 发送消息
Activity01.this.myHandler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}

热点内容
sqlserver介绍 发布:2025-05-13 17:58:00 浏览:3
云闪付安卓版哪个版本好用 发布:2025-05-13 17:57:16 浏览:186
我的世界服务器如何卡穿墙 发布:2025-05-13 17:52:41 浏览:735
为什么游戏更新连接不到服务器 发布:2025-05-13 17:44:09 浏览:786
谷歌play商店如何连接服务器 发布:2025-05-13 17:38:11 浏览:481
ssl认证服务器搭建 发布:2025-05-13 17:33:42 浏览:890
cpul2缓存 发布:2025-05-13 17:32:09 浏览:450
编译是语言的特点 发布:2025-05-13 17:31:36 浏览:583
原神怎么看服务器版本 发布:2025-05-13 17:09:14 浏览:73
java连接符 发布:2025-05-13 17:05:44 浏览:57