2019独角兽企业重金招聘Python工程师标准>>>

看了很多资料,翻啊翻啊,似乎有些了解了。

Android中对View的更新有很多种方式,使用时要区分不同的应用场合。我感觉最要紧的是分清:多线程和双缓冲的使用情况。

现在可以尝试理解下面的模拟场景:

两个人:一对夫妻,老公上班,老婆在家,现在他们都要吃饭。

“不使用多线程和双缓冲”的情况是:老公在公司吃,老婆在家吃,互不干扰,吃就是了。

“使用多线程和不使用双缓冲”的情况是:老婆做好饭,另外让人送一份到公司,老公收到饭就可以吃了。

“使用多线程和使用双缓冲”的情况是:老婆做好饭,等老公回家一起吃。

1.不使用多线程和双缓冲

这种情况最简单了,一般只是希望在View发生改变时对UI进行重绘。你只需在Activity中显式地调用View对象中的invalidate()方法即可。系统会自动调用 View的onDraw()方法。

2.使用多线程和不使用双缓冲

这种情况需要开启新的线程,新开的线程就不好访问View对象了。强行访问的话会报:android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views.

这时候你需要创建一个继承了android.os.Handler的子类,并重写handleMessage(Message msg)方法。android.os.Handler是能发送和处理消息的,你需要在Activity中发出更新UI的消息,然后再你的Handler(可以使用匿名内部类)中处理消息(因为匿名内部类可以访问父类变量, 你可以直接调用View对象中的invalidate()方法 )。也就是说:在新线程创建并发送一个Message,然后再主线程中捕获、处理该消息。

3.使用多线程和双缓冲

Android中SurfaceView是View的子类,她同时也实现了双缓冲。你可以定义一个她的子类并实现SurfaceHolder.Callback接口。由于实现SurfaceHolder.Callback接口,新线程就不需要android.os.Handler帮忙了。SurfaceHolder中lockCanvas()方法可以锁定画布,绘制玩新的图像后调用unlockCanvasAndPost(canvas)解锁(显示),还是比较方便得。

转载于:https://my.oschina.net/dreamworker/blog/9346

Android中UI(View)的刷新相关推荐

  1. android中实现view的更新有两组方法

    android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用.     Android提供了 ...

  2. android listview 滑动条显示_第七十六回:Android中UI控件之RecyclerView基础

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ListView优化的例子,这一回咱们说的例子是UI控件之RecyclerView.闲话休提,言归正转.让我们一起Talk Androi ...

  3. android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  4. android 布局颜色设置颜色设置,怎么在Android中利用view设置布局颜色

    怎么在Android中利用view设置布局颜色 发布时间:2020-12-10 16:16:37 来源:亿速云 阅读:154 作者:Leah 这期内容当中小编将会给大家带来有关怎么在Android中利 ...

  5. android 触摸监听重写_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  6. Android 中自定义View 裁剪扇形图片

    Android 中自定义View 裁剪扇形图片 当需要裁剪图片为扇形区域时,使用Canvas.clipPath(path)方法可以裁剪为扇形区域 ps:此方法会导致绘制图片边缘有锯齿,暂无解决方法(知 ...

  7. android listview 刷新不正确,Android中设置ListView内容刷新问题

    最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来.在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决 ...

  8. Android中设置ListView内容刷新问题

    最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来.在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决 ...

  9. android中listView下拉刷新

    下拉刷新界面最初流行于iphone应用界面,如图:     然后在Android中也逐渐被应用,比如微博,资讯类.     所以,今天要实现的结果应该也是类似的,先贴出最终完成效果,如下图,接下来我们 ...

最新文章

  1. 最大子矩阵(降维处理)
  2. mysql 源码安装 5.6.21_Mysql5.6.21源码安装
  3. 2019 快过去了,自动驾驶发展得怎么样了?
  4. 通过DLL使两个工程公用部分代码
  5. ITK:应用Cos图像滤镜
  6. CentOS查看CPU信息
  7. SGU155(笛卡尔树的构造)
  8. leetcode 368. Largest Divisible Subset | 368. 最大整除子集(动态规划详解)
  9. 计算机硬件在线修复,计算机硬件维修
  10. 笔刷怎么做_原来是这样:用PS笔刷做出颜料肌理效果!
  11. 当年一道python面试题的失利让我错过心仪公司,希望你不会
  12. python编程高手之路——函数调用
  13. 【iOS开发】An Apple ID with identifier xxxis not available. Please enter a different string.
  14. 注意sizeof()返回的数无符号数,有符号数遇到无符号数时变成无符号数
  15. MySQL 事务的实现原理,写得太好了!
  16. 实战爬虫:python爬虫学习笔记之爬取搜狗|微信文章——动态网页爬取
  17. “人人都是数据科学家从新开始用Python学习数据科学的完整教程P1
  18. ECSHOP二次开发之心得体验
  19. 初中计算机课感悟,初中信息技术课教育随笔
  20. JMeter 扩展开发:扩展 TCP 取样器

热门文章

  1. 大数据_Hbase-Filter 索引(优化)_根据column查询---Hbase工作笔记0020
  2. Lua开发工作笔记0004---交互式编程与脚本式编程及注释的写法
  3. STM32工作笔记0082---UCOSIII系统中的OSIntEnter() 与 OSIntExit()
  4. 初学关键段容易忽略的问题
  5. %lf 和 %f 有什么区别
  6. 市场营销读后感_好书共赏市场营销原理——带你探索市场营销成功的奥秘 !...
  7. 随想录(MFC开发有感)
  8. linux下的C语言开发(自动编译工具和config.h文件生成)
  9. android与ios图片类型转换,ios11图片转换工具
  10. apollo @value没生效_不问不要紧,一文要人命,绝对的面试加分项配置中心Apollo深度解读...