自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(53)
  • 收藏
  • 关注

转载 Android:谈谈最被误读的属性adjustViewBounds

今天,和大家聊聊ImageView上的adjustViewBounds属性。这个属性其实用的也比较多,可有意思的是,网上对这个属性的解释,大部分都是错误或者不准确的。今天这篇文章,就结合我个人的理解,和大家聊聊adjustViewBounds到底是什么意思。首先,澄清两个概念:ImageView和图片ImageView:Android里用来显示图片的控件。ImageView的长宽可以设定为固定值:比如,100dp或match_parent。也可以设定为不固定值:wrap_content。I

2020-11-19 19:32:09 510

转载 ConstraintLayout 属性详解 和Chain的使用

本文的顺序,大体按照ConstraintLayout官方文档的顺序依次讲解(翻译)属性和用法,并对疑难点进行额外说明。关于可视化操作,可参考我写的动态图解&实例 ConstraintLayout Chain和郭神博文可视化操作使用前的准备引入也有坑,无力吐槽。先放上 截止至20170524,最新版本1.0.1:compile 'com.android.support.const...

2020-04-07 20:01:48 730

转载 Android应用ANR分析

最近碰到了个死锁的anr,看了这篇文章挺有用的,mark下:一.ANR是什么Application Not Responding,字面意思就是应用无响应,稍加解释就是用户的一些操作无法从应用中获取反馈。在实际的应用中应当去避免这种现象,虽然他暂时不会造成应用崩溃,但是却极大的损坏了用户体验。二.ANR的触发原因出现ANR之后一个直观现象就是系统会展示出一个ANR对话框,大概是...

2020-01-19 19:20:37 865 1

转载 AsyncLayoutInflater实现异步加载布局

「性能优化1.0」启动分类及启动时间的测量「性能优化1.1」计算方法的执行时间「性能优化1.2」异步优化「性能优化1.3」延迟加载方案「性能优化2.0」布局加载原理「性能优化2.1」LayoutInflater Hook控件加载耗时「性能优化2.2」获取布局的加载时间「性能优化2.3」Choreographer检测丢帧「性能优化2.4」 AsyncLayoutInflater实现异步加载布局一...

2020-01-16 10:45:55 821

转载 xfermode的基本用法

之前使用时遇到点坑,有个注意的地方:绘制顺序,先画src bitmap,设置xfermode后,再画dst bitmap。只有两次都是draw bitmap时才有效,之前我用的drawCircle直接绘制图形叠加后没效果,后来先自己画一个圆的bitmap在往上面画就可以了。下面转载一篇xfermode 像素叠加原理的介绍:1、Xfermode是什么在Android自定义控...

2019-12-25 14:34:34 179

转载 Android 静态广播和动态广播接收顺序

Android广播有两个很重要的要素: 1 广播-用于发送广播 有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达。 典型代表:短信广播 普通广播 - 发送至每一个已经注册(订阅)的广播接收器,无法被终止。 典型代表:开机启动广播 2广播接收器- 用于订阅广播后接收广播 静态注册广...

2019-12-16 19:58:20 998

转载 JVM运行原理详解

1.JVM简析:作为一名Java使用者,掌握JVM的体系结构也是很有必要的。说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API)。它们的关系如下图所示:Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是...

2019-12-10 17:10:46 83

转载 JVM深度解析

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台...

2019-12-10 16:38:36 124

转载 MessageQueue原理分析(2)

而在Handler的消息机制中,MessageQueue可能算是最重要的,今天我们就来分析这个类。在分析之前,先提出两个问题:1.Handler.sendMessageDelayed()怎么实现延迟的?2.Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR?现在,我们带着这两个问题进入MessageQueue的分析中。首先看第一...

2019-12-05 19:20:12 342

转载 MessageQueue原理分析(1)

每次使用Handler发送一个Message的时候,最终会先调用MessageQueue的enqueueMessage方法将Message方法放入到MessageQueue里面,最后会调用Handler的mQueue的enqueueMessage方法。MessageQueue类内部实现了两个Interface,一个静态内部类。接口IdleHandler在消息队列没有消息时使用,处理poll...

2019-12-05 18:35:42 1643

转载 java中带参数的try(){}语法含义是什么?

Java 7简化资源清理(try-with-resources)自动关闭资源的try语句自动关闭资源格式:try( )//此处多了圆括号,()圆括号内写打开资源的代码,在这里创建的对象必须实现Autocloseable接口{IO操作}catch(){处理异常的代码}带资源的try语句(try-with-resource)的最简形式为:...

2019-11-28 15:54:28 495

转载 深入理解单例模式:静态内部类单例原理

本文主要介绍java的单例模式,以及详细剖析静态内部类之所以能够实现单例的原理。OK,废话不多说,进入正文。首先我们要先了解下单例的四大原则:1.构造私有。2.以静态方法或者枚举返回实例。3.确保实例只有一个,尤其是多线程环境。4.确保反序列换时不会重新构建对象。我们常用的单例模式有:饿汉模式、懒汉模式、双重锁懒汉模式、静态内部类模式、枚举模式,我们来逐一分析下这些模式的...

2019-11-28 14:11:04 94

转载 彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系

首先用一段通俗易懂但是不是非常专业的话描述一下三者的概念、区别和联系。Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。 Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事...

2019-11-28 11:28:45 111

转载 Android - 收藏集

Android 自定义View的各种姿势1Activity的显示之ViewRootImpl详解Activity的显示之ViewRootImpl初探Activity的显示之Window和ViewAndroid系统的创世之初以及Activity的生命周期图解Android事件分发机制(深入底层源码)Android 自定义View的各种姿势2Android 内存泄漏分析与解决...

2019-11-27 13:35:36 307

转载 Android6.0 SurfaceControl分析(转载)

这篇文字写的不错,收藏文章太多不好找,转载链接只为能快速找到文章:(一)SurfaceControl创建&使用 Surface创建&使用https://blog.csdn.net/kc58236582/article/details/64918810(二)SurfaceControl和SurfaceFlinger通信https://blog.csdn.n...

2019-11-26 19:34:19 345

转载 Surface分析

本篇针对Surface模块进行分析,从Java层的Activity创建开始,到ViewRoot、WindowsManagerService,再到JNI层和Native层。Surface的创建涉及三个部分: App 进程 App需要将自己的内容显示在屏幕上,所以App负责发起Surface创建请求,创建好Surface后, 就可以直接可以在canvas上画图等,最终都会保存到Surfac...

2019-11-25 16:02:40 568

转载 聊一聊Android的消息机制

1概述在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有:1)消息发送者;2)消息队列;3)消息处理循环。示意图如下:图中表达的基本意思是,消息发送者通过某种方...

2019-11-20 14:40:47 143

原创 createPackageContext方法分析----------记一次context的getApplicationContext为空问题

通过createPackageContext方法获取其他应用context,lnflate这个应用的布局视图添加后,此视图context的getApplicationContext为空问题调查。问题现象:通过调用createPackageContext方法获取了某个应用的context:remoteContext,然后通过remoteContext.getResources()获取对于...

2019-11-15 17:46:41 2426 1

转载 Android里的Context

侯亮(本文以Android 7.0为准)1 什么是Context?在Android平台上,Context是一个基本的概念,它在逻辑上表示一个运行期的“上下文”。其实何止是Android平台,在其他平台上,一样有上下文的概念,比如一个进程,其实也是个上下文。我们在编写最简单的C语言程序时,凭什么写一句简单的malloc()就可以申请到内存,写一句简单的open()就可以打开一个文...

2019-11-15 16:50:49 139

转载 Java四种线程池newCachedThreadPool, newFixedThreadPool, newScheduledThreadPool, newSingleThreadExecutor

1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?newThread(newRunnable() { @Override publicvoidrun() { // TODO Auto-generated method stub }}).start();那你就out太多了,new Thread的弊端如下:a....

2019-11-04 13:37:56 673

转载 Binder之传输机制篇_下

1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向bin...

2019-09-11 23:48:10 386

转载 Binder之传输机制篇_中

1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动。然而在驱动层,这部分数据又是如何传递到BBinder一侧的呢?这里面到底藏着什么猫腻?另外,上一篇文章虽然阐述了4棵红黑树,但是并未说明红黑树的节点到底是怎么产生的。现在,我们试着回答这些问题。1.1 概述 在Binder驱动层,和ioctl()相对的动作是b...

2019-09-11 23:46:41 459

转载 Binder 之传输机制篇_上

1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击。其实,在binder驱动层,还有个与之相对的结构,...

2019-09-11 23:45:21 306

转载 Binder 之ServiceManager

1.先说一个大概 Android平台的一个基本设计理念是构造一个相对平坦的功能集合,这些功能可能会身处于不同的进程中,然而却可以高效地整合到一起,实现不同的用户需求。这就必须打破过去各个孤立App所形成的天然藩篱。为此,Android提供了Binder机制。 在Android中,系统提供的服务被包装成一个个系统级service,这些service往往会在设备启动...

2019-09-11 23:43:44 276

转载 Binder 概述

1 什么是Binder? 简单地说,Binder是Android平台上的一种跨进程交互技术。该技术最早并不是由Google公司提出的,它的前身是Be Inc公司开发的OpenBinder,而且在Palm中也有应用。后来OpenBinder的作者Dianne Hackborn加入了Google公司,并负责Android平台的开发工作,所以把这项技术也带进了Android。...

2019-09-11 22:48:26 4271

转载 详解在onMeasure()方法中如何测量一个控件尺寸----值和模式传递机制

今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法。如果只是说要重写什么方法有什么用的话,还是不太清楚。先去源码中看看为什么要重写onMeasure()方法,这个方法是在哪里调用的:一、源码中的measure/onMeasure方法: protected void...

2019-09-11 20:17:33 530

原创 记LinearLayout原生的一个尺寸计算Bug

先写一下得出的结论:vertical 布局的LinearLayout,如果其中某个 child的 height + marginTop + marginBottom值为负值,就可能出现LinearLayout最下方多出一块空白区域的问题,应该是原生代码的一个设计缺陷吧。代码如下:protected void onCreate(Bundle savedInstanceState) {...

2019-08-27 13:53:55 133

转载 View的onAttachedToWindow和onDetachedFromWindow的调用时机分析

笔者为什么会挑这个话题,是因为长时间以来我自己对这2个方法一直有些疑惑,比如:为啥叫onAttachedToWindow而不是onAttachedToActivity,Window又是什么,在哪里?毕竟我们平时绝大多数时候接触到的是Activity啊; Activity有明确的生命周期方法,但View却没有,那么这2个方法可以认为是View的吗?它们又何时会被调用呢?慢慢地随着在这一行逐渐...

2019-06-28 10:56:52 1800

原创 java循环遍历List时删除元素总结

在日常代码中,遍历List然后删除特定的元素是很常见的操作,Java中的循环主要有普通的for循环、增加for循环、iterator遍历这几种方法,我们知道在循环list时删除元素可能引起异常,这里总结下什么情况下会引起异常,什么情况不会引起异常。1.for循环正序遍历listfor(int i=0;i<list.size();i++){ if(list.get(i).e...

2019-06-27 17:24:01 1082 2

原创 使用aapt2 修改apk打包的资源id

在进行插件化开发时,如果插件apk含有res资源,宿主apk和插件apk在编译时都会产生自己的resources.arsc。由于打包后的宿主和插件apk资源id默认都是0x7f开头,那么它们的resources.arsc中的资源id必定是有相同的情况,会引起资源id冲突问题。解决问题目前一共有两种思路:1. 修改aapt源码,定制aapt工具,编译期间修改PP段。(PP字段是资源id的第一...

2019-05-07 18:56:59 5078 7

转载 APK打包流程

1. 简单build流程图官网给了我们一张非常简单的编译、打包、apk生成内容以及签名的图片。图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容:一个或多个dex文件、resources.arsc、未编译的资源文件以及AndroidManifest.xml文件等等由android的项目经过编译和打包,形成了:.dex 文...

2019-05-06 09:26:13 1103

转载 DirectBoot功能介绍

当手机已经通电开机但是用户并有解锁锁屏的时候,Android N运行于一个安全的模式,也就是Dierect Boot模式。​ 为了支持Dierect Boot模式,系统提供了两个存储数据的地方:1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。2.Device encrypted storage,主要对应的就是Direct Boot使用的...

2019-01-27 00:02:55 4493 2

转载 超详细java中的ClassLoader详解

作者简介 原创微信公众号郭霖 WeChat ID: guolin_blog转自:https://blog.csdn.net/briblue/article/details/54973413前言ClassLoader 翻译过来就是 类加载器,普通的Java开发者其实用到的不多,但对于某些框架开发者来说却非常常见。理解 ClassLoader 的加载机制,也有利于我们编写出更高效的代码。...

2019-01-23 09:09:41 317

转载 ART、JIT、AOT、Dalvik之间的关系

JIT与DalvikJIT是"Just In Time Compiler"的缩写,就是"即时编译技术",与Dalvik虚拟机相关。怎么理解这句话呢?这要从Android的一些特性说起。JIT是在2.2版本提出的,目的是为了提高Android的运行速度,一直存活到4.4版本,因为在4.4之后的ROM中,就不存在Dalvik虚拟机了。我们使用Java开发android,在编译打包APK...

2019-01-18 09:19:39 182

原创 SQLite在3.7.0版本的WAL机制

   在android P上调试数据库拷贝问题时,发现应用的databases目录下除了普通的db后缀的数据库文件外,还有两个额外的文件,以我自己的应用为例,分别为 app.db、app.db-wal、app.db-shm。 然后发现即使已经往数据库更新数据后,通过工具打开db文件发现文件中的数据并未变化。调查了下发现是SQLite在3.7.0版本上的新特性。     1.什么是WAL?  ...

2019-01-15 15:18:56 931 1

转载 Android自定义权限使用总结

1、如何声明自定义权限在Manifest文件中使用Permission标签定义自己的权限:&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bright.permissio...

2019-01-15 11:09:24 385 1

原创 Android8.0 启动后台Service问题

 android P上应用在后台启动service时报了个异常:java.lang.IllegalStateException,Not allowed to start service Intent Android 8.0 对特定函数做出了以下变更:如果针对 Android 8.0 的应用尝试在不允许其创建后台服务的情况下使用 startService() 函数,则该函数将引发一...

2019-01-14 14:55:25 3140

转载 Java中Volatile关键字详解

Java语言提供了一种稍弱的同步机制,即volatile变量,用来确保将变量的更新操作通知到其他线程。当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。  在访问volatile变量时不会...

2019-01-07 09:40:43 2740

转载 TypedArray流程分析

Context#obtainStyledAttributes// 调用Resources.Theme的obtainStyledAttributes方法return getTheme().obtainStyledAttributes(attrs);在Context中的getTheme方法是抽象方法,那我们得看他的子类的具体实现,我们一般会在自定义View的时候调用此方法,而自定义V...

2019-01-04 13:53:17 513

转载 HashMap、Hashtable、ConcurrentHashMap的原理与区别

转载自https://www.cnblogs.com/heyonggang/p/9112731.html下面直接来干货,先说这三个Map的区别:HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相关优化 初始size为11,扩容:newsi...

2019-01-03 14:22:59 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除