Android四大组件
Android六大布局
Android类加载器
在Android开发中,不管是插件化还是组件化,都是基于Android系统的类加载器ClassLoader来设计的。只不过Android平台上虚拟机运行的是Dex字节码,一种对class文件优化的产物,传统Class文件是一个Java源码文件会生成一个.class文件,而Android是把所有Class文件进行合并、优化,然后再生成一个最终的class.dex,目的是把不同class文件重复的东西只需保留一份,在早期的Android应用开发中,如果不对Android应用进行分dex处理,那么最后一个应用的apk只会有一个dex文件。
Android中常用的类加载器有两种,DexClassLoader和PathClassLoader,它们都继承于BaseDexClassLoader。区别在于调用父类构造器时,DexClassLoader多传了一个optimizedDirectory参数,这个目录必须是内部存储路径,用来缓存系统创建的Dex文件。而PathClassLoader该参数为null,只能加载内部存储目录的Dex文件。所以我们可以用DexClassLoader去加载外部的apk文件,这也是很多插件化技术的基础。
Android之View介绍
Android进程与线程
Android的数据存储
Android的系统架构
从小到上就是:linux,kernel,lib,dalvik vm,application,framework, app
Android应用程序结构
- main code
- unit test
- manifest
- res -> drawable,drawable-xxhdpi,layout,value,mipmap
mipmap 是一种很早就有的技术了,翻译过来就是纹理映射技术.
google建议只把启动图片放入。- lib
- color
Android中的几种动画
帧动画:指通过指定每一帧的图片和播放时间,有序的进行播放而形成动画效果,比如想听的律动条。
视图动画(补间动画):指通过指定View的初始状态、变化时间、方式,通过一系列的算法去进行图形变换,从而形成动画效果,主要有Alpha、Scale、Translate、Rotate四种效果。注意:只是在视图层实现了动画效果,并没有真正改变View的属性,比如滑动列表,改变标题栏的透明度。
属性动画:在Android3.0的时候才支持,通过不断的改变View的属性,不断的重绘而形成动画效果。相比于视图动画,View的属性是真正改变了。比如view的旋转,放大,缩小。
通过变化属性来达到动画的效果,性能略差,支持点击等事件。android 3.0
Gif动画:原理和帧动画差不多,是canvas画出来。
Android内存溢出内存泄露
// 内存溢出:
out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存溢出通俗的讲就是内存不够用。
// 内存泄露:
memory leak:是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光
// 内存泄露检测工具 → LeakCanary
跨进程通讯的几种方式
// Android 跨进程通信,像intent,contentProvider,广播,service都可以跨进程通信。
1、Files 文件系统(包括内存映射)
2、Sockets
3、Pipes 管道
、共享内存
5、Intents, ContentProviders, Messenger
6、Binder
intent:这种跨进程方式并不是访问内存的形式,它需要传递一个uri,比如说打电话。
contentProvider:这种形式,是使用数据共享的形式进行数据共享。
service:远程服务,aidl
广播
Android为什么不能在子线程更新UI
Android程序运行时权限与文件系统权限的区别
文件的系统权限是由linux系统规定的,只读,读写等。
运行时权限是对于某个系统上的app的访问权限,允许,拒绝,询问。这个可以防止非法的程序访问敏感的信息。
Activity详解
Service介绍
Context
Context是一个抽象基类。在翻译为上下文,也可以理解为环境,是提供一些程序的运行环境基础信息。
Context下有两个子类,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现类。
而ContextWrapper又有三个直接的子类, ContextThemeWrapper、Service和Application。
其中,ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity,所以Activity和Service以及Application的Context是不一样的,只有Activity需要主题,Service不需要主题。
Context一共有三种类型,分别是Application、Activity和Service。
这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。
getApplicationContext()和getApplication()方法得到的对象都是同一个application对象,只是对象的类型不一样。
Context数量 = Activity数量 + Service数量 + 1(1为Application)
Intent
Intent —— 意图
用于 android 个组件的启动和组件间传递数据
属性:
component —— 目标组件描述
action —— 对Intent执行动作的描述
data —— 对此次Intent操作相关数据的描述
type —— 对Intent所关联的数据类型的描述
category —— 对Intent执行动作的附加信息描述
extra —— 对其他一切附加信息的描述,他是对其他所有附加信息的集合
Intent-Filter —— 意图 过滤器
IntentFilter
IntentFilter —— 意图过滤器
对 Intent 的描述进行过滤操作,对 Intent 的各个属性进行匹配,从而选择出相应的组件来执行 Intent 想要进行的操作
在 IntentFilter中action、category、data都可以存在多个
匹配原则
action —— Intent 中的 action 只要和 IntentFilter 中的任意一个 action 一样即可
category —— Intent 中添加的 category 必须全部在 IntentFileter 定义的 category 中
data —— Intent 中的 data 要和 IntentFilter 中的 data 的描述匹配
type —— Intent 中的 type 要和 IntentFilter 中 data 要求的 mimeType 一致
Handler、Message、MessageQueue、Looper详解
Socket通信相关
EventBus相关
Fragment简介
Java反射机制
apk简单介绍(组成以及打包安装流程)
Android之代码混淆
Android事件冲突原理及解决方法
Android签名算法的原理