通过查看源码,查看invalidate和postInvalidate的区别

查View的源码可知:

postInvalidate是使用handler发送消息,即可以使用在非UI线程中,而invalidate直接修改布局,所以只能用在UI线程里了。

public void invalidate() {

invalidate(true);

}

void invalidate(boolean invalidateCache) {

if (ViewDebug.TRACE_HIERARCHY) {

ViewDebug.trace(this, ViewDebug.HierarchyTraceType.INVALIDATE);

}

if (skipInvalidate()) {

return;

}

if ((mPrivateFlags & (DRAWN | HAS_BOUNDS)) == (DRAWN | HAS_BOUNDS) ||

(invalidateCache && (mPrivateFlags & DRAWING_CACHE_VALID) == DRAWING_CACHE_VALID) ||

(mPrivateFlags & INVALIDATED) != INVALIDATED || isOpaque() != mLastIsOpaque) {

mLastIsOpaque = isOpaque();

mPrivateFlags &= ~DRAWN;

mPrivateFlags |= DIRTY;

if (invalidateCache) {

mPrivateFlags |= INVALIDATED;

mPrivateFlags &= ~DRAWING_CACHE_VALID;

}

final AttachInfo ai = mAttachInfo;

final ViewParent p = mParent;

//noinspection PointlessBooleanExpression,ConstantConditions

if (!HardwareRenderer.RENDER_DIRTY_REGIONS) {

if (p != null && ai != null && ai.mHardwareAccelerated) {

// fast-track for GL-enabled applications; just invalidate the whole hierarchy

// with a null dirty rect, which tells the ViewAncestor to redraw everything

p.invalidateChild(this, null);

return;

}

}

if (p != null && ai != null) {

final Rect r = ai.mTmpInvalRect;

r.set(0, 0, mRight - mLeft, mBottom - mTop);

// Don‘t call invalidate -- we don‘t want to internally scroll

// our own bounds

p.invalidateChild(this, r);

}

}

}

public void postInvalidate() {

postInvalidateDelayed(0);

}

public void postInvalidateDelayed(long delayMilliseconds) {

// We try only with the AttachInfo because there‘s no point in invalidating

// if we are not attached to our window

AttachInfo attachInfo = mAttachInfo;

if (attachInfo != null) {

Message msg = Message.obtain();

msg.what = AttachInfo.INVALIDATE_MSG;

msg.obj = this;

attachInfo.mHandler.sendMessageDelayed(msg, delayMilliseconds);

}

}



通过查看源码,查看invalidate和postInvalidate的区别,布布扣,bubuko.com

时间: 2024-12-14 11:11:12

通过查看源码,查看invalidate和postInvalidate的区别的相关文章

apk反编译查看源码

1.将apk解压 ,解压后为 2.得到其中的classes.dex文件,下载软件dex2jar,把classes.dex文件拷贝到该软件下 3.运行d2j-dex2jar.bat classes.dex,得到了此文件 4.下载jd-gui工具,打开查看源码 查看代码是否进行了混淆,是否包括了显而易见的敏感信息,如果没有混淆,软件非常不安全

APPK反编译 dex文件查看源码

00x01 工具准备 Android逆向助手_v2.2 jd-gui apk 7z-zip 00x02 详细步骤 a. 从应用宝官网下载apk,这里我下载了借贷宝: b. 使用 7z-zip提取客户端apk文件,也可先把客户端apk文件后缀名改为 .zip后解压: c. 使用Android逆向助手_v2.2 lib目录下的 dex2jar.bat工具对客户端apk中的 classes.dex文件进行反编译,具体操作如下图: d. 反编译得到的 .jar文件使用Android逆向助手_v2.2 l

安卓http源码查看器详解

1.效果图如下,输入网址就可以看到该网址的源码 2.项目工程文件如右图所示: 3.首先,布局文件如下,我采用的是线性布局 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent"

开源jar包导入并查看源码

我们用Ctrl + 左键查看源码的时候往往出现以下情况,是因为没有正确的导入jar包,以及没有导入src包 1.右键项目-->build ptah-->config build path下面是解决方法(从导入jar包开始): 2.add Libary-->User Library ,点击User Library那个按钮,然后新建一个库. 3.点击User Library那个按钮,名字由你自己取.然后点击OK 再然后选择你信创建的库,点击finish. 4.然后往库里导jar包 add l

java_eclipse 反编译插件查看源码 的设置操作

1. 需要导入3个文件:net.sf.jadclipse_3.3.0.jar , jadclipse_3.3.0.jar ,jad.exe 2.改写目录,设置目录 jad.exe  存放入jdk 的bin目录下: net.sf.jadclipse_3.3.0.jar , jadclipse_3.3.0.jar , 存放入eclipse 的plug-in 目录下: 3. 改写默认的class viewer. 4. 重启浏览器. 已经可以看见底层代码了. java_eclipse 反编译插件查看源码

hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码

eclipse快捷键alt+shift+m将选中的代码封装成方法:alt+shift+l将选中的代码添加对应类型放回参数 当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法 package com.kane.hdfs; import java.io.InputStream; import java.net.URL; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory; import org

Android Eclipse Libs 的 jar 源码查看 (或者新版本ADT无法查看jar的源码)

问题背景:在使用比较新的ADT的时候,无法导入Jar中的源码包查看源码.只好自己打开压缩包,实在恼火.在半年前,只好这样. 问题解决方案:我就以 " android-support-v4.jar "为例子 1.如上图在Libs加上一个android-support-v4.jar.properties这样文件 2.内容就是你的该jar包源码路径:如下图 3.我比较蠢的做法.直接重启Eclipse(有些人关闭项目再打开项目就好了.不过有些时候看人品.) 你再尝试点击你想看的源码类.就能完全

.NET Framework源码查看与调试

1. 直接下载.NET Framework源代码(下载地址),然后用Visual Studio打开查看. 2. 在线查看,网址:http://referencesource.microsoft.com/ . Refer: A new look for .NET Reference Source http://blogs.msdn.com/b/dotnet/archive/2014/02/24/a-new-look-for-net-reference-source.aspx Configure V

Ubuntu下使用sublime text 3安装插件Package Control+cTags+Cscope后查看源码利器

1.安装Package Control : http://jingyan.baidu.com/article/d3b74d64a302631f77e609fa.html 2.安装cTags插件: http://jingyan.baidu.com/article/656db9189c9761e381249cf5.html 3.安装Cscope插件 1. 通过 Preference -> Package Control -> Install Package安装Cscope插件 2. 安装Cscop