requestLayout,invalidate,postinvalidate,View ViewGroup Widget LinearLayout

转载 2016年05月30日 15:58:44

View.requestLayout() 请求重新布局 View.invalidate() 刷新视图,相当于调用View.onDraw()方法。
Handler异步实现的原理和适用的优缺点
   在Handler 异步实现时,涉及到Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)thread(子线程)运行并生成Message-Looper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

(1)、AsyncTask是封装好的线程池,比起Thread+Handler的方式,AsyncTask在操作UI线程上更方便,因为onPreExecute()、onPostExecute()及更新UI方法onProgressUpdate()均运行在主线程中,这样就不用Handler发消息处理了;
(2)、我不太同意封装好就会影响性能的说法,在我实际的运用中,真正的缺点来自于AsyncTask的全局线程池只有5个工作线程,也就是说,一个APP如果运用AsyncTask技术来执行线程,那么同一时间最多只能有5个线程同时运行,其他线程将被阻塞(注:不运用AsyncTask执行的线程,也就是自己new出来的线程不受此限制),所以AsyncTask不要用于多线程取网络数据,因为很可能这样会产生阻塞,从而降低效率。

能否同时并发100+asynctask呢?
      AsyncTask用的是线程池机制,容量是128,最多同时运行5个core线程,剩下的排队。

invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。

Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。 

  Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

入门级的基础知识,以前对View,VIewGroup,widget,layout等的关系搞不清楚,通过学习后,做了下总结,如下:

1.View,ViewGroup

>View:

}1、所有高级UI组件都继承View类而实现的
}2、一个View在屏幕上占据一块矩形区域
}3、 负责渲染
}4、负责处理发生的事件
}5、设置是否可见
}6、设置是否可以获得焦点等
 
2.ViewGroup:
}1、一个ViewGroup对象是一Android.view.ViewGroup实例
}2、View的容器
}3、 负责对添加进ViewGroup的View进行布局
}4、一个ViewGroup可以加入到另一个ViewGroup
 
3.View ,ViewGroup的关系
 

4.View,widgetView的继承关系

2.widget

}1、界面中展示的各个小组件
}2、有独立的事件处理能力
}3、所有Wiget组件都是继承View而来
注:1.widget并不是实际存在的类,它是一个包,而VIew等就是实际存在的类,所以首字母大写。在引用时,通常:

          import android.view.View;

          import android.widget.TextView;

         因为widget是包,所以首字母小写

        2.在该包内放的是UI Elements,包括TextView,ListView,但是这些元素都继承自View或ViewGroup。如下图所示:

 

 

 

其中各种layout继承自ViewGroup

4 layout

对UI 组件进行布局

 关于view及其子类的关系如下:


Android View 深度分析requestLayout、invalidate与postInvalidate

前言前几篇文章中,笔者对View的三大工作流程进行了详细分析,而这篇文章则详细讲述与三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程...

从源码上深度剖析View invalidate 、 postInvalidate、requestLayout

对于Android View的自定义来说,这三兄弟简直是我们必须要拿下的坎,那么这三个方法有什么本质上的区别呢? 我个人认为要从本质上来认识这三者的区别,那么你肯定要对Android View的绘制...

Android Custom View ---->invalidate() 、postInvalidate() and requestLayout()

invalidate():View本身调用,迫使view重绘,需要在UI线程中自身调用。当View的appearance发生改变,比如状态改变(enable,focus),背景改变,隐显改变等,这些都...

Android View 分析requestLayout、invalidate与postInvalidate

1.前言:首先我需要了解 invalidate与postInvalidate 的区别,然后网上找了些资料,大多都是一个版本,负责点的排版整齐,不负责的排版直接很乱,一堆代码集中在一起,也没有解释清楚。...

Android中Invalidate和postInvalidate和requestLayout的区别

requestLayout:当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置。特别的...

requestLayout、invalidate与postInvalidate的区别与使用场景分析

这篇文章将详细讲述与view自定义三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看view的绘制流程。 h...

Android invalidate() 、postinvalidate()和requestLayout()

invalidate:View本身调用,迫使view重绘,需要在UI线程中自身调用。当View的appearance发生改变,比如状态改变(enable,focus),背景改变,隐显改变等,这些都属于...

android view requestLayout,invalidate 事件的分发,接收,以及处理

handleResumeActivity DecorView 是在ActivityThread 中的handleResumeActivity 通过mWindowManager 挂到 ViewRoot...
  • hdmsnow
  • hdmsnow
  • 2015年11月11日 19:10
  • 241

Android开发:Invalidate和postInvalidate刷新View的区别及应用-----ImageView绘制旋转圆环(二)

上文已经实现了圆环旋转,但是很多合格。发现之前对handler Thread Runnable理解的不深,包括如何刷新UI。这次总算清了一下帐,基本搞清除了。Android中实现view的更新有两组方...

自定义View时遇到的invalidate 和 postInvalidate的区别

自定义View时,onDraw(Canvas canvas)方法中画出自己想要的图案 @Override protected void onDraw(Canvas canvas) { ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:requestLayout,invalidate,postinvalidate,View ViewGroup Widget LinearLayout
举报原因:
原因补充:

(最多只允许输入30个字)