
android
just2learn
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ConstraintLayout 属性详解 和Chain的使用
本文的顺序,大体按照ConstraintLayout官方文档的顺序依次讲解(翻译)属性和用法,并对疑难点进行额外说明。关于可视化操作,可参考我写的动态图解&实例 ConstraintLayout Chain和郭神博文可视化操作使用前的准备引入也有坑,无力吐槽。先放上 截止至20170524,最新版本1.0.1:compile 'com.android.support.const...转载 2020-04-07 20:01:48 · 851 阅读 · 0 评论 -
Android应用ANR分析
最近碰到了个死锁的anr,看了这篇文章挺有用的,mark下:一.ANR是什么Application Not Responding,字面意思就是应用无响应,稍加解释就是用户的一些操作无法从应用中获取反馈。在实际的应用中应当去避免这种现象,虽然他暂时不会造成应用崩溃,但是却极大的损坏了用户体验。二.ANR的触发原因出现ANR之后一个直观现象就是系统会展示出一个ANR对话框,大概是...转载 2020-01-19 19:20:37 · 1137 阅读 · 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 · 969 阅读 · 0 评论 -
xfermode的基本用法
之前使用时遇到点坑,有个注意的地方:绘制顺序,先画src bitmap,设置xfermode后,再画dst bitmap。只有两次都是draw bitmap时才有效,之前我用的drawCircle直接绘制图形叠加后没效果,后来先自己画一个圆的bitmap在往上面画就可以了。下面转载一篇xfermode 像素叠加原理的介绍:1、Xfermode是什么在Android自定义控...转载 2019-12-25 14:34:34 · 231 阅读 · 0 评论 -
Android 静态广播和动态广播接收顺序
Android广播有两个很重要的要素: 1 广播-用于发送广播 有序广播 - 被广播接收器接收后,可被终止,无法往下继续传达。 典型代表:短信广播 普通广播 - 发送至每一个已经注册(订阅)的广播接收器,无法被终止。 典型代表:开机启动广播 2广播接收器- 用于订阅广播后接收广播 静态注册广...转载 2019-12-16 19:58:20 · 1148 阅读 · 0 评论 -
MessageQueue原理分析(2)
而在Handler的消息机制中,MessageQueue可能算是最重要的,今天我们就来分析这个类。在分析之前,先提出两个问题:1.Handler.sendMessageDelayed()怎么实现延迟的?2.Looper.loop是一个死循环,拿不到需要处理的Message就会阻塞,那在UI线程中为什么不会导致ANR?现在,我们带着这两个问题进入MessageQueue的分析中。首先看第一...转载 2019-12-05 19:20:12 · 479 阅读 · 0 评论 -
MessageQueue原理分析(1)
每次使用Handler发送一个Message的时候,最终会先调用MessageQueue的enqueueMessage方法将Message方法放入到MessageQueue里面,最后会调用Handler的mQueue的enqueueMessage方法。MessageQueue类内部实现了两个Interface,一个静态内部类。接口IdleHandler在消息队列没有消息时使用,处理poll...转载 2019-12-05 18:35:42 · 1754 阅读 · 0 评论 -
Android - 收藏集
Android 自定义View的各种姿势1Activity的显示之ViewRootImpl详解Activity的显示之ViewRootImpl初探Activity的显示之Window和ViewAndroid系统的创世之初以及Activity的生命周期图解Android事件分发机制(深入底层源码)Android 自定义View的各种姿势2Android 内存泄漏分析与解决...转载 2019-11-27 13:35:36 · 413 阅读 · 0 评论 -
Android6.0 SurfaceControl分析(转载)
这篇文字写的不错,收藏文章太多不好找,转载链接只为能快速找到文章:(一)SurfaceControl创建&使用 Surface创建&使用https://blog.youkuaiyun.com/kc58236582/article/details/64918810(二)SurfaceControl和SurfaceFlinger通信https://blog.csdn.n...转载 2019-11-26 19:34:19 · 457 阅读 · 0 评论 -
Surface分析
本篇针对Surface模块进行分析,从Java层的Activity创建开始,到ViewRoot、WindowsManagerService,再到JNI层和Native层。Surface的创建涉及三个部分: App 进程 App需要将自己的内容显示在屏幕上,所以App负责发起Surface创建请求,创建好Surface后, 就可以直接可以在canvas上画图等,最终都会保存到Surfac...转载 2019-11-25 16:02:40 · 702 阅读 · 0 评论 -
聊一聊Android的消息机制
1概述在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信。从技术实现上来说,消息机制还是比较简单的。从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有:1)消息发送者;2)消息队列;3)消息处理循环。示意图如下:图中表达的基本意思是,消息发送者通过某种方...转载 2019-11-20 14:40:47 · 190 阅读 · 0 评论 -
createPackageContext方法分析----------记一次context的getApplicationContext为空问题
通过createPackageContext方法获取其他应用context,lnflate这个应用的布局视图添加后,此视图context的getApplicationContext为空问题调查。问题现象:通过调用createPackageContext方法获取了某个应用的context:remoteContext,然后通过remoteContext.getResources()获取对于...原创 2019-11-15 17:46:41 · 2737 阅读 · 1 评论 -
Android里的Context
侯亮(本文以Android 7.0为准)1 什么是Context?在Android平台上,Context是一个基本的概念,它在逻辑上表示一个运行期的“上下文”。其实何止是Android平台,在其他平台上,一样有上下文的概念,比如一个进程,其实也是个上下文。我们在编写最简单的C语言程序时,凭什么写一句简单的malloc()就可以申请到内存,写一句简单的open()就可以打开一个文...转载 2019-11-15 16:50:49 · 181 阅读 · 0 评论 -
activity getIntent() 方法获取不到值的问题分析
之前有同事小伙伴问我说,他在activity里边调用getIntent()方法没有获取到应该传递过来的值。看了下他这个activity是single task属性的,怀疑是由于activity的single task属性引起的。本文主要是针对这个getIntent()方法分析下源码定位原因: /** Return the intent that started this activit...原创 2018-12-15 23:16:45 · 5792 阅读 · 3 评论 -
记LinearLayout原生的一个尺寸计算Bug
先写一下得出的结论:vertical 布局的LinearLayout,如果其中某个 child的 height + marginTop + marginBottom值为负值,就可能出现LinearLayout最下方多出一块空白区域的问题,应该是原生代码的一个设计缺陷吧。代码如下:protected void onCreate(Bundle savedInstanceState) {...原创 2019-08-27 13:53:55 · 188 阅读 · 0 评论 -
详解在onMeasure()方法中如何测量一个控件尺寸----值和模式传递机制
今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法。如果只是说要重写什么方法有什么用的话,还是不太清楚。先去源码中看看为什么要重写onMeasure()方法,这个方法是在哪里调用的:一、源码中的measure/onMeasure方法: protected void...转载 2019-09-11 20:17:33 · 602 阅读 · 0 评论 -
Binder 之ServiceManager
1.先说一个大概 Android平台的一个基本设计理念是构造一个相对平坦的功能集合,这些功能可能会身处于不同的进程中,然而却可以高效地整合到一起,实现不同的用户需求。这就必须打破过去各个孤立App所形成的天然藩篱。为此,Android提供了Binder机制。 在Android中,系统提供的服务被包装成一个个系统级service,这些service往往会在设备启动...转载 2019-09-11 23:43:44 · 365 阅读 · 0 评论 -
Binder 之传输机制篇_上
1 Binder是如何做到精确打击的? 我们先问一个问题,binder机制到底是如何从代理对象找到其对应的binder实体呢?难道它有某种制导装置吗?要回答这个问题,我们只能静下心来研究binder驱动的代码。在本系列文档的初始篇中,我们曾经介绍过ProcessState,这个结构是属于应用层次的东西,仅靠它当然无法完成精确打击。其实,在binder驱动层,还有个与之相对的结构,...转载 2019-09-11 23:45:21 · 361 阅读 · 0 评论 -
Binder之传输机制篇_中
1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动。然而在驱动层,这部分数据又是如何传递到BBinder一侧的呢?这里面到底藏着什么猫腻?另外,上一篇文章虽然阐述了4棵红黑树,但是并未说明红黑树的节点到底是怎么产生的。现在,我们试着回答这些问题。1.1 概述 在Binder驱动层,和ioctl()相对的动作是b...转载 2019-09-11 23:46:41 · 526 阅读 · 0 评论 -
Binder之传输机制篇_下
1 事务的传递和处理 从IPCThreadState的角度看,它的transact()函数是通过向binder驱动发出BC_TRANSACTION语义,来表达其传输意图的,而后如有必要,它会等待从binder发回的回馈,这些回馈语义常常以“BR_”开头。另一方面,当IPCThreadState作为处理命令的一方需要向发起方反馈信息的话,它会调用sendReply()函数,向bin...转载 2019-09-11 23:48:10 · 488 阅读 · 0 评论 -
View的onAttachedToWindow和onDetachedFromWindow的调用时机分析
笔者为什么会挑这个话题,是因为长时间以来我自己对这2个方法一直有些疑惑,比如:为啥叫onAttachedToWindow而不是onAttachedToActivity,Window又是什么,在哪里?毕竟我们平时绝大多数时候接触到的是Activity啊; Activity有明确的生命周期方法,但View却没有,那么这2个方法可以认为是View的吗?它们又何时会被调用呢?慢慢地随着在这一行逐渐...转载 2019-06-28 10:56:52 · 2041 阅读 · 0 评论 -
使用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 · 5724 阅读 · 7 评论 -
深入理解MessageQueue
这篇文章写的不错https://blog.youkuaiyun.com/qq_24531461/article/details/72972416#commentBox,用简单的代码将大体原理描述清除,通俗易懂。下面补充个图:这个图比较形象的介绍了,handler、Looper、MessageQueue和Msg 的关系,其中Looper和MessageQueue是比较重要的两个类。Looper的lo...转载 2018-12-31 15:40:45 · 477 阅读 · 0 评论 -
TypedArray流程分析
Context#obtainStyledAttributes// 调用Resources.Theme的obtainStyledAttributes方法return getTheme().obtainStyledAttributes(attrs);在Context中的getTheme方法是抽象方法,那我们得看他的子类的具体实现,我们一般会在自定义View的时候调用此方法,而自定义V...转载 2019-01-04 13:53:17 · 621 阅读 · 0 评论 -
Android UID的分配、查看及相关知识
转载自https://www.jianshu.com/p/b33dd49f2ae6uid pid gid gids 的含义和作用 uid 的分配 查看应用UID 的几种方式 通过uid获取包名,通过包名获取uid下面所有涉及的示例代码都是基于 Android 8.1的。1. uid pid gid gids 的含义和作用uid: android中uid用于标识一个应用程序,ui...转载 2018-12-29 16:27:05 · 2313 阅读 · 0 评论 -
android P 隐藏API对系统APP的影响
转载至 https://www.jianshu.com/p/8286c91fdcb9android P限制了第三方APK对@hide API的调用,那么对系统APK有什么影响呢?国内各大手机厂商对ROM进行各种定制,可以很容易绕过这些限制,那对于需要出海并且满足CTS要求的厂商有什么影响呢?先说结论:对系统厂商APK没有任何影响,依然可调用任何API 第三方APK,受hide...转载 2018-12-28 14:36:06 · 1617 阅读 · 0 评论 -
Activity的启动流程中创建应用程序进程的流程分析
之前从网上找到的一张activity启动流程图,步骤画的比较全,不过有创建应用进程的地方有两个点没表现出来,本文又根据代码简单的捋了一下这个地方。 AMS创建应用进程时,在startProcessLocked方法中通过Process.start方法创建进程: // Start the process. It will either succeed and retu...原创 2018-12-14 23:21:53 · 322 阅读 · 0 评论 -
Android The content of the adapter has changed but ListView did not receive a notification问题分析
最近一同事的模块在monkey测试时报出了一个crash:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modifi...原创 2018-12-03 16:12:06 · 582 阅读 · 0 评论 -
Activity 启动模式及常见启动Flag总结
Activity 4种启动模式:1、android:launchMode=”standard” 标准启动模式。这种启动模式也是Activity默认的,一个栈中可以有多个相同的Activity。不会考虑是否栈中是否有相同的Activity。比如设置A为standard模式,那么可以运行A-B-A-A-A;2、android:launchMode=”singleTop” 单一栈顶启动模式,栈顶只能...原创 2018-11-08 23:33:29 · 4156 阅读 · 2 评论 -
INotify与Epoll机制
使用背景Android Input需要使用InputReader去监控设备节点的一些动作,包括节点的新建和删除动作以及如何去确定节点中是否有内容可以去读.最简单的方法是起一个线程在循环中不断地去做轮询(polling),但是这样做的效率比较低,而且会导致设备的电量在无意义的轮询中消耗掉.众所周知Android使用的Linux内核,因此面对这种问题,Android使用了Linux提供的INoti...转载 2019-01-01 16:54:15 · 1389 阅读 · 0 评论 -
APK打包流程
1. 简单build流程图官网给了我们一张非常简单的编译、打包、apk生成内容以及签名的图片。图片大体介绍了从Project到运行到设备或者模拟器的一个大体流程,我们也从中看到一个完整的apk包含如下内容:一个或多个dex文件、resources.arsc、未编译的资源文件以及AndroidManifest.xml文件等等由android的项目经过编译和打包,形成了:.dex 文...转载 2019-05-06 09:26:13 · 1154 阅读 · 0 评论 -
DirectBoot功能介绍
当手机已经通电开机但是用户并有解锁锁屏的时候,Android N运行于一个安全的模式,也就是Dierect Boot模式。 为了支持Dierect Boot模式,系统提供了两个存储数据的地方:1.Credential encrypted storage,默认存储数据的地方,仅在用户解锁手机后可用。2.Device encrypted storage,主要对应的就是Direct Boot使用的...转载 2019-01-27 00:02:55 · 5197 阅读 · 2 评论 -
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 · 1143 阅读 · 1 评论 -
Android自定义权限使用总结
1、如何声明自定义权限在Manifest文件中使用Permission标签定义自己的权限:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.bright.permissio...转载 2019-01-15 11:09:24 · 445 阅读 · 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 · 3321 阅读 · 0 评论 -
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 · 239 阅读 · 0 评论 -
View 的getX、getLeft、getTranslationX、getScrollX、offsetLeftAndRight含义分析
View 的getX、getLeft、getTranslationX、getScrollX含义分析参考https://blog.youkuaiyun.com/tanktu/article/details/12752747getLeft 是子view相对于父组件的坐标位置,是layout的位置;getTranslationX 是指view的偏移量,这个值没有改变view的实际位置,点击事件等还是在原来的位...原创 2018-11-07 15:39:14 · 1573 阅读 · 0 评论