Android Note
文章平均质量分 91
万丈高楼平地起,把基础掌握牢固已经能胜任工作中的大部分任务。基础牢固了再谈优化~ 借此专栏来总结回顾打打基础~
dev晴天
接下来需要花一段时间把博客重新整理下,重新巩固下知识点,,,,加油!!!
展开
-
【Android View】自定义属性
在自定义view过程中有时为了方便需要自定义属性,本篇就来总结回顾下这个知识点。原创 2019-02-28 18:44:57 · 1695 阅读 · 1 评论 -
自定义view绘图篇--图片和文字的绘制
图片的绘制功能可以让我们直接添加一张图片到画布,文字的绘制可以点缀我们view的功能。本章节继续深入,总结下其中的流程。知识点原创 2019-07-31 20:50:25 · 802 阅读 · 0 评论 -
自定义view绘图篇--贝塞尔曲线
一路升级打怪终于到了贝塞尔曲线啦!学到这里我们就可以搞一些炫酷的特效啦,qq的红点拖动、小说阅读的翻页特效这些都是常见的典例,是不是好期待!!!是不是想开启装X模式,自己亲手实战,别急我们先探讨下本节内容。。。知识点...原创 2019-08-01 20:22:41 · 589 阅读 · 1 评论 -
自定义view绘图篇--Path
path这个类在图形的绘制中十分重要,它可以画出我们前面学过的基础图形,也可以画出我们前面画不出来的不规则图形,特别是使用贝塞尔曲线我们可以做出吊炸天的特效。十分向往吧、内心是不是有点小激动!接下来便继续深入----开启path之旅。。。知识点参考了两位大佬的文章(文末给出)加以提炼,绘制出由浅入深的快速了解Path的路线。Path介绍安卓对直线和曲线进行了封装,都封装到了pa...原创 2019-07-27 19:08:07 · 265 阅读 · 0 评论 -
自定义view绘图篇--Paint与Canvas
通过自定义view基础我们对自定义view也有所了解啦。然而我们在安卓开发中或许会见过这样的特效:手机管家的清理垃圾、安卓的饼状图、手机直播界面的泡泡上浮(使用到了贝塞尔曲线)。其实这些特效都是自定义view的实现,确切的说是 动画+自定义绘图。这里我们就分章节慢慢深入,总结下这些知识点。本篇知识点一、了解Paint 和Canvas1、paint:英文原意为“涂料”的意思,安卓里面理...原创 2019-07-25 18:16:46 · 334 阅读 · 0 评论 -
Hook 原来是这么回事
一、安卓逆向工程1、逆向工程:直接从成品推导出产品的设计原理。2、逆向工程分类:静态分析:不执行程序情况下对程序进行分析动态分析:程序运行时对程序进行调试分析。Hook技术就属于动态分析。二、Hook1、被hook的对象被称为hook点2、Hook点要稳定、不易变化(如静态变量、单例)3、分类:根据不同的规定可以有不同的划分,这里主要讲java代码Hook 实现原理需要知识点:代理设计模式反射多态的理解(查找方法时,优先查找子类对象方法,找不到时再去查找父类对象中的方法。原创 2021-05-22 18:47:24 · 1001 阅读 · 0 评论 -
JVM&DVM的ClassLoader
知识点一、先谈谈对java ClassPath 的理解还记得自己刚接触java时使用记事本敲helloWorld那段日子吗?想必我们都经历过环境配置:javaHome配置path配置classPath配置当时自己可能稀里糊涂的按照网上的教程就完成了,也没有深思为啥这样,最近看了看虚拟机的类加载机制来然后回顾下这里的东西发现豁然开朗了。1、javaHome:指定了java安装的根目录,这个方便后面直接使用。例如C:\Program Files\Java\jdk1.8.0_66\bin这原创 2021-04-06 22:13:49 · 299 阅读 · 2 评论 -
Android VM
知识点一、安卓虚拟机的发展历史1、诞生每次运行程序的时,Dalvik VM负责加载 dex/odex 文件并解析成机器码交由系统调用。2、Android 2.2 JIT 登场和其他大多数 JVM 一样,Dalvik 使用 JIT 进行即时编译,借助 Java HotSpot VM,JIT 编译器可以对热点代码进行编译优化,将 dex/odex 中的 Dalvik Code ( Smali 指令集 ) 翻译成相当精简的 Native Code 去执行,JIT 的引入使得 Dalvik 的性能原创 2021-03-29 22:11:07 · 630 阅读 · 0 评论 -
JNI 原理
知识点先放张图,emmmm 待续!!!!原创 2021-03-22 20:32:07 · 508 阅读 · 0 评论 -
Android JNI
前言在没接触JNI之前或许大家和我一样只了解这些:JNI是一个接口层,通过这层接口java代码可以调用c\c++代码。同样c\c++代码也可以调用java代码。对于java代码调用c\c++ 代码你仔细回顾下写代码的经历或许会发现,这个我也碰到过啊emmmm,,,,,如 java 系统api System类中的一个数组拷贝方法,其实自己就是不了解如何调用c\c++代码的流程。代码如下:public static native void arraycopy(Object src, int srcP原创 2021-03-21 15:31:20 · 218 阅读 · 0 评论 -
安卓的ActivityManagerService
AMS一个很重要的系统服务,安卓的四大组件都与之关联,这里便深入了解下它。一、AMS关联类Android 7.0和Android 8.0对于AMS相关部分处理有较大的区别,为了更好地理解AMS家族,这里将分别介绍Android 7.0和Android 8.0的AMS关联类。1、Android 7.0的AMS关联类简介ActivityManager:主要对运行中的Activity进行管理。管理工作实际并不是由ActivityManager来处理的,而是交由AMS来处理的。ActivityMana原创 2021-03-14 15:04:37 · 768 阅读 · 0 评论 -
Android 的Context
说起安卓的Context 大家肯定是“既熟悉又陌生”,熟悉是因为startActivity、startService、getApplicationContext等无论是使用Context的方法还是把Context作为参数传递在开发中经常见。陌生是因为貌似工作了两三年对他的认知貌似还停留在如上阶段。这里就探究下这个神奇的Context。目录一、关联类&作用1、Context的使用场景小结使用Context的方法,如开启Activty、访问资源、调用系统的Service等。。。作为参数传入原创 2021-03-10 19:55:47 · 263 阅读 · 0 评论 -
【Service的工作过程】bindService的启动过程
Service 的绑定过程将分为两个部分,分别是ContextImpl到AMS的调用过程和Service的绑定过程。目录ContextImpl到AMS的调用过程这点流程与startService方式流程一致,也是调用ContextImpl的bindService最终请求AMS的bindService。这里就介绍下ContextImpl到AMS调用间的一个重要方法ContextImpl#bindServiceCommon private boolean bindServiceCommon(In原创 2021-03-09 20:28:37 · 427 阅读 · 0 评论 -
【Service的工作过程】startService的启动过程
Service有两种开启方式即startService、bindService,本章是startService的启动流程。目录ContextImpl到AMS的调用过程时序图了解最常见的开启service组件的方式就是在Activity中直接startService,其实在Activity也是Context的一个子类,startService方法定义在Context这个类中。Context相关的集成关系如下图Context定义了整个应用运行的上下文环境,是一个抽象类,ContextWrapp原创 2021-03-06 19:16:44 · 1389 阅读 · 0 评论 -
根Activity工作过程
Activity的启动过程分为两种,一种是根Activity的启动过程,另一种是普通Activity的启动过程。根Activity指的是应用程序启动的第一个Activity,根Activity的启动过程一般情况下也可以理解为应用程序的启动过程。普通Activity指的是除应用程序启动的第一个Activity之外的其他Activity。知识点一、Launcher请求AMS过程时序图Launcher 启动后会将已安装应用程序的快捷图标显示到桌面上,这些应用程序的快捷图标就是启动根Activity的入原创 2021-02-19 20:23:33 · 231 阅读 · 0 评论 -
自定义view绘图篇--Canvas的变换
画布的相关操作也是十分重要的,上一篇《自定义view绘图篇–Paint与Canvas》的总结使我们对绘图有了一些基本的概念,并且能够绘制了基本的几何图形,本节继续深入,探讨画布的相关操作。本节要点一、画布平移 translate1、画布须知画布的默认大小、默认坐标系和你的自定义view的大小、自定义view的坐标系一致!!!画布的默认大小、默认坐标系和你的自定义view的大小、自...原创 2019-07-26 20:40:50 · 323 阅读 · 0 评论 -
应用程序进程是如何启动的?
要点应用程序进程的启动过程Zygote的Java框架层中会创建一个Server端的Socket,这个Socket用来等待AMS请求Zygote来创建新的应用程序进程。Zygote进程通过fock自身创建应用程序进程,这样应用程序进程就会获得Zygote进程在启动时创建的虚拟机实例。当然,在应用程序进程创建过程中除了获取虚拟机实例外,还创建了Binder线程池和消息循环,这样运行在应用进程中的应用程序就可以方便地使用Binder进行进程间通信以及处理消息了。启动一个应用程序,要保证这个应用程序所需要的原创 2021-01-18 21:04:45 · 812 阅读 · 0 评论 -
Android 系统启动
要点流程一、Init进程启动过程init进程是Android系统中用户空间的第一个进程,进程号pid为1,是Android系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建Zygote(孵化器)和属性服务等。1、Init进程开启前几步流程在Init进程开启前还有几步流程的,这里我们先来了解下Android系统启动流程的前几步。如下,当我们按下启动电源时,系统启动后会加载引导程序,引导程序又启动Linux 内核,在Linux 内核加载完成后,第一件事就是要启原创 2021-01-04 21:43:58 · 319 阅读 · 0 评论 -
安卓系统架构
概述Android系统架构分为五层,从上到下依次是应用层、应用框架层、系统运行库层、硬件抽象层和Linux内核层。Android底层内核空间以Linux Kernel作为基石,上层用户空间由Native系统库、虚拟机运行环境、框架层组成,通过系统调用(Syscall)连通系统的内核空间与用户空间。对于用户空间主要采用C++和Java代码编写,通过JNI技术打通用户空间的Java层和Native层(C++/C),从而连通整个系统。官方经典分层架构Linux 内核层Linux 内核提供了系统的进程管原创 2021-01-01 22:11:56 · 1333 阅读 · 0 评论 -
Android动画深入分析-View动画
一、安卓中的动画1、分类View动画帧动画属性动画2、简单介绍View动画概念:view动画就是通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度),从而产生动画效果。特点:渐进式动画,支持自定义。帧动画概念:通过顺序播放一系列的图像从而产生动画效果。可以简单的理解为图片切换动画。缺点:很显然图片过多过大就会导致oomps:其实帧动画也是view动画...原创 2019-06-09 18:25:48 · 295 阅读 · 0 评论 -
Android动画深入分析-属性动画初级用法
一、 属性动画引入的背景1、view动画的不足之处1、作用的对象只能是view2、只能播放view的四种动画或动画组合(透明渐变、平移、缩放、旋转)3、非view对象不能使用view动画4、太局限 灵活性差5、补间动画还有一个致命的缺陷,就是它只是改变了View的显示效果而已,而不会真正去改变View的属性。(这点可以给按钮设置点击事件进行平移动画测试点击位置)2、属性动画属...原创 2019-06-10 22:50:46 · 235 阅读 · 0 评论 -
Android动画深入分析-属性动画中级用法:TypeEvaluator
要点1、TypeEvaluator和ofObject2、自定义ValueAnimator的TypeEvaluator使用3、自定义ObjectAnimator的TypeEvaluator使用一、TypeEvaluator和ofObject1、TypeEvaluator那么TypeEvaluator的作用到底是什么呢?简单来说,就是告诉动画系统如何从初始值过度到结束值。我们在上一篇文章...原创 2019-06-11 16:53:23 · 301 阅读 · 0 评论 -
Android动画深入分析-属性动画插值器Interpolator 和ViewPropertyAnimator使用
我们会见到动画播放由快到慢播放、匀速播放、先加速后减速播放。这些效果都是通过插值器来实现的。Interpolator 简介1、作用可以控制动画的变化速率2、须知1、Interpolator并不是属性动画中新增的技术,实际上从Android 1.0版本开始就一直存在Interpolator接口2、补间动画也是支持这个功能的3、属性动画中新增了一个TimeInterpolato...原创 2019-06-11 20:19:54 · 228 阅读 · 0 评论 -
RemoteViews
要点RemoteViews 简介开发中经常使用的通知栏就是RemoteViews。主要通过NotificationManager的notify来实现。然而RemoteViews还可以用来做桌面小部件,主要通过AppWidgetProvider来实现。这两者更新界面时无法像在activity里面那样更新。因为二者都是运行在其他进程中(系统的SystemService进程)但是remotevi...原创 2019-07-01 20:51:15 · 219 阅读 · 0 评论 -
理解Window和WindowManager(二)三种window的创建过程
我们知道view是安卓中视图的呈现方式,但是view不能单独存在,他必须依附在window这个抽象概念上,因此有视图的地方就有window。我们都清楚安卓提供视图的地方有Activity,Dialog,Toast,还有一些依托window而实现的视图如popUpWindow等。其实这些就对应三种window类型,应用window、子系统、系统window。接下来便总结下Activity,Dia...原创 2019-04-16 11:34:18 · 977 阅读 · 1 评论 -
理解Window和WindowManager(一)window的添加删除更新view
window表示窗口的概念,平时开发中使用不多,但是某些时候我们需要在桌面上显示一个类似悬浮窗的东西(比如系统弹的吐司:Toast,就是在window上弹得)那么这种效果就需要window来实现。一、简单介绍1、window是一个抽象类,他的具体唯一实现类phonewindow2、创建window使用windowmanager即可,windowmanager是外界访问window的入口...原创 2019-04-15 19:03:57 · 2301 阅读 · 0 评论 -
view知识点终篇:自定义view
自定义view一直便是中高级工程师必备知识点,对于初学者来说也是一座山,翻过这座山知识储备便会有所提高。本文不会详细总结各种自定义view的写法,在这里主要总结下自定义view的相关概念、自定义view注意要点。提供view事件体系参考文章、view的工作流程参考文章,自定义view系列文章练习,相信吧view的事件体系、工作流程弄个大概,自定义view书写便会容易多了。一、自定义view的分...原创 2019-04-14 11:15:23 · 333 阅读 · 0 评论 -
View的工作原理(三)layout和draw过程
layout方法确定view的位置,onLayout方法用来确定子view的位置,接下来看view的layout源码。一、Layout过程1、 view的Layout public void layout(int l, int t, int r, int b) { if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFOR...原创 2019-04-13 22:32:00 · 258 阅读 · 0 评论 -
View的工作原理(二)Measure过程
view的工作流程主要是指measure、layout、draw这三大流程,即测量,布局、绘制。measure决定view测量的宽高,layout决定view的最终宽高和摆放位置,draw将view绘制到屏幕上。一、Measure过程measure 过程要分两种情况:1、 View。如果是 View 的话,那么只通过 measure 方法就完成其测量过程2、 ViewGroup。但是...原创 2019-04-13 11:36:41 · 343 阅读 · 0 评论 -
View的工作原理(一)初认识ViewRoot、DecorView,理解MeasureSpec
下午待续。。。。。2019-04-12 12…03原创 2019-04-12 12:04:15 · 441 阅读 · 0 评论 -
View的事件体系(四)view滑动冲突
下午待续:2019 04 11原创 2019-04-11 11:20:07 · 239 阅读 · 0 评论 -
View的事件体系(三)view的事件分发机制
本章开始总结vie事件的分发机制:view的核心知识、view的难点、view的另一大难点滑动冲突解决的理论基础。一、了解下安卓的view层级: 其实我们平时在xml中写的view都是通过activity的setContentView被一步步加载到window上的,事件的产生也是首先从activity按照层级往下传递,一直到我们CustomView的最内层布局view,中间传递过程有着事...原创 2019-04-09 19:00:38 · 1638 阅读 · 0 评论 -
View的事件体系(二)view的弹性滑动
上节主要总结了view的滑动和view的基础概念,这里就补充view的弹性滑动实现方式弹性滑动方式使用Scroller操作scrollTo/ScrollBy使用动画使用延时策略一、Scroller的使用1、使用步骤(固定):1、 创建Scroller对象Scroller mScroller = new Scroller(context);//2、 调用方法 ...原创 2019-04-09 11:46:53 · 249 阅读 · 0 评论 -
View的事件体系(一)view基础和view的几种滑动方式
View的事件体系一原创 2019-04-07 11:54:29 · 270 阅读 · 0 评论 -
【Android IPC】Binder浅析
一、Binder上层原理二、Binder连接池原创 2021-08-05 22:21:45 · 252 阅读 · 0 评论 -
【Android IPC】AIDl使用详解
了解aidl1、概念aidl:android interface definition language(安卓接口定义语言)。安卓ipc方式之一。2、为啥设计这种语言为了ipc啊,特别适合并发情况下ipc。这门语言就像一个桥梁吧两个app,或者不同的进程联系起来,进行交流通信。3、语法语法十分简单,和java几乎一样。(1)文件后缀我们平时写的代码文件为.java而ai...原创 2019-06-29 14:43:59 · 979 阅读 · 0 评论 -
【Android IPC】安卓中常见IPC实现方式
通信方式1、使用Bundle其实Intent的putExtro(XXX xxx)方法可以在进程之间的通信(简单的例子如下)(1)简单栗子两个activity:MainActivity 、SecondActivity(清单文件开启新的进程)MainActivity: Log.i(Tags.TAG, "Main activity pid: " + Process.myPid()...原创 2019-06-21 21:02:15 · 405 阅读 · 0 评论 -
【Android IPC】序列化
要点serializable、parcelable接口可以完成对象序列化过程。1、 当我们需要通过intent和Binder传输数据的时候,就需要使用serializable,或者parcelable。2、我们需要把对象持久化到设备上,或者通过网络传输给其他客户端这时候也需要serializable来完成对象持久化。一 、Serializable接口1、简介:Serializab...原创 2019-03-31 10:47:01 · 345 阅读 · 0 评论 -
【Android IPC】IPC基础
Android IPC要点一、安卓中ipc简介1、相关概念:1、 IPC:inter process communication的缩写,进程间的通信,即两个进程间进行数据交换。2、线程:线程是cpu调度的最小单元,,同时线程是一种有效的系统资源。3、进程:进程一般指一个执行单元,在pc或者移动设备上一般指一个程序或者一个应用。2、进程与线程关系:一个进程可以包含多个线程。最简...原创 2019-03-30 11:13:55 · 301 阅读 · 0 评论 -
【Android Activity】Activity的工作流程
基础回顾四大组件之一,必须在Manifest文件中注册。启动方式有显式隐式。具有特定的启动模式(4种)主要用于展示界面和用户进行交互工作流程1、写到烂的开启方式(显式栗子) startActivity(new Intent(MainActivity.this,SecondActivity.class));系统对四大组件的内部工作进行了封装,当然activity也不例外。一句...原创 2019-07-08 11:55:11 · 2107 阅读 · 0 评论