zoukankan      html  css  js  c++  java
  • Android可以子线程更新UI?

    初了解Android的时候,就知道Android是不能在子线程更新UI的,不然程序会直接抛出异常,告诉你,别给我在自线程搞事情!

    但是,这个是针对普通的view做的限制,而TextureView,Surface则可以在自线程更新UI,你可以在它的内部创建线程,然后使用
    canvas在线程里进行绘制。

    TextureView与SurfaceView的不同之处在于,textureView使用surfaceholder,是从当前页面的view中获取的,而SurfaceView则是
    对当前View的置顶区域挖空,持有单独的surfaceHolder。在游戏开发或做视频播放功能时,由于界面需要保持刷新,所以他们都是基于
    surfaceView或TextureView进行的。

    Github上的一个项目,ScrollTextView,也是继承SurfaceView,在线程中不断的更改文字绘制的位置,实现的文字滚动。

    好处当然很明显,在单独的线程中处理逻辑,不会受其他线程,其他View的影响。
    坏处也有,页面切换的时候会闪;而且当两个页面都使用了该SurfaceView的时候,两个view对象对抢夺canvas的锁对象,造成应用ANR。

    所以surfaceView和TextureView不能滥用,一般的功能需求是用不到这两个view的。

  • 相关阅读:
    复制工程或修改工程名字后找不到第三方库解决方法
    描述文件不匹配的解决方法
    JSON Code3840错误
    swift介绍和语言概述
    swift
    新入行程序员应知的十个秘密
    signal SIGABRT
    属性,属性赋值及其内存管理
    HTTP网络请求
    使用类目删除可变字符串中重复字母的一个算法
  • 原文地址:https://www.cnblogs.com/liyilin-jack/p/10293509.html
Copyright © 2011-2022 走看看