fzhzsh 2011-09-01 15:52
浏览 237
已采纳

关于android底层绘制机制

各位大侠,先请看下面一段非常非常简单的代码:
package com.zsh;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class TestAndroid3Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    final Button button=new Button(this);
    button.setText("啊啊啊"); 

    setContentView(button);

    button.setOnClickListener(new View.OnClickListener()

{

@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
button.setText("aa");
button.invalidate();
try{
Thread.sleep(5000);
}catch (Exception e) {
// TODO: handle exception
}

button.setText("bb");

}
});
}
}

整个系统就这么一个文件。想实现的功能是一点button,先替换自己的文字为aa,过5秒后再替换自己的文字为bb。可是实际运行效果为点了后没反应,过5秒后直接替换为bb(因为先替换为aa然后瞬间替换为bb看不到aa的缘故)。我想问一下android底层绘制的机制到底是什么呢?如果是在当前线程绘制的话应该按顺序执行先替换完然后invalidate显示给用户然后再去睡。。请问为什么?请详细讲解下android绘制,顺便问一下想实现我的功能应该怎么做。

  • 写回答

10条回答 默认 最新

  • rainbow702 2011-09-02 13:47
    关注

    [quote]你好,你说的“UI主线程捕捉到这个消息的时候才会去刷新 button 的值”那请问目前这个线程是不是UI主线程?如果是,谈何捕捉消息呢?[/quote]
    打个比方吧,假设主线程本来做的事就是从 A 到 B 再到 C,但当它在从 B 到 C 的过程中时,你在中间插了一脚了(就比如说点击了一个按钮,设这个操作为 D),然后它就改道先至 D 然后再去 C。之后,它又在 A B C 间循环。那么,不管 A B C 中哪一个包含了重画当前界面的操作,都必须等你的 D 的操作完成之后才能被再次执行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题