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

解决方案 »

  1.   

    3、android ui为什么说不是线程安全的?在不同的线程操作UI的结果不一样。不过有一个UI控件列外:progressBar 是线程安全的。
      

  2.   

    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,会导致异常。
      

  3.   


    有问题,可以在博客给我留言。 会及时帮助你 http://blog.csdn.net/ORIETech ORIETech