zoukankan      html  css  js  c++  java
  • 为什么说invalidate()不能直接在线程中调用

     

    1、为什么说invalidate()不能直接在线程中调用?
    2、它是怎么违背单线程的?
    3、Android ui为什么说不是线程安全的?
    4、android ui操作为什么一定要在UI线程中执行?

    1、为什么说invalidate()不能直接在线程中调用?
    答:
        Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在非UI主线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。例如:在非UI线程中调用invalidate会导致线程不安全,也就是说可能在非UI线程中刷新界面的时候,UI线程(或者其他非UI线程)也在刷新界面,这样就导致多个界面刷新的操作不能同步,导致线程不安全
    2、它是怎么违背单线程的?
    答:一个 Android 程序开始运行时,就有一个主线程Main Thread被创建。该线程主要负责UI界面的显示、更新和控件交互,所以又叫UI Thread。由于只有UI线程更新界面所以说
    Android是单线程模型。   一个Android程序创建之初,一个Process呈现的是单线程模型--即Main Thread,在非主线程(UI线程)外调invalidate()刷新界面出现异常,即是说用其他的线程更新UI,android中是不被允许的。
    3、android ui为什么说不是线程安全的?
    答:android UI 中提供invalidate()来更新界面,而invalidate()方法是线程不安全。
    4、android ui操作为什么一定要在UI线程中执行?
    答:UI主线程是更新UI界面的,更新了界面才能看到运行的效果。
         再者Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行。如果在子线程中直接修改UI,会导致异常。

    FROM:http://chenjinhua1595515.blog.163.com/blog/static/21583214720140834012400/

  • 相关阅读:
    Python 面向对象(类与对象)
    修改Centos文 7件夹所在组及权限(不同用户共用一个文件夹)
    CGPoint,CGSize,CGRect
    关于投资币圈的思考和微信群问答干货整理
    数字货币合约交易基础知识
    比特币成长大事记
    健康医疗笔记(四)癌症知识
    ​阿德勒心理学《被讨厌的勇气》一切烦恼皆源于人际关系
    免费学术论文网站Sci-Hub
    数字货币交易所开发笔记3-撮合引擎开发
  • 原文地址:https://www.cnblogs.com/xgjblog/p/6146253.html
Copyright © 2011-2022 走看看