Activity,Service,Content provider,broadcast receiver。 详情
standard, singleTop, singleTask, singleInstance。详情
Binder是Android系统上实现的一种IPC(Inter-process communication,进程间通信)机制。详情
HAL 接口定义语言(简称 HIDL,发音为“hide-l”)是用于指定 HAL 和其用户之间的接口的一种接口描述语言 (IDL)。HIDL 允许指定收集到接口和软件包的类型和方法调用。从更广泛的意义上来说,HIDL 是用于在可以独立编译的代码库之间进行通信的系统。HIDL 旨在用于进程间通信 (IPC)。详情
Android系统本质上来说就是一个消息驱动的系统。Android使用消息机制实现线程间的通信,线程通过Looper建立自己的消息循环,MessageQueue是FIFO的消息队列,Looper负责从MessageQueue中取出消息,并且分发到消息指定目标Handler对象。Handler对象绑定到线程的局部变量Looper,封装了发送消息和处理消息的接口。详情
final为java修饰符,它可以用来定义变量,方法或者类,表示不可修改;
finally用在try/catch语句块中,表示这段语句始终会被执行到;
finalize为Object 类中定义的方法,在垃圾收集器删除对象之前调用。
分为5个等级:Foreground,Visible,Service,Background,Empty。详情
transient Object[] elementData;
Android 提供了两种方式来完成序列化与反序列化过程: Serializable ; Parcelable 。二者的 区别。
传统递归有两个缺陷:效率低,占内存;如果递归链过长,可能会statck overflow。
尾递归是一种特殊的递归,递归形式的调用都出现在函数的末尾,特点是在回归过程中不用做任何操作,大多数现代的编译器会利用这种特点自动生成优化的代码。在尾递归中,首先执行计算,然后执行递归调用,将当前步骤的结果传递给下一个递归步骤。这导致最后一个语句采用的形式(return (recursive-function params))。基本上,任何给定递归步骤的返回值与下一个递归调用的返回值相同详情。
IO | NIO |
---|---|
面向字节流 | 面向缓冲区 |
阻塞 | 基于Selector的非阻塞 |
使用字符串常量池,每当我们使用字面量(String s=”1”;)创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么就将此字符串对象的地址赋值给引用s(引用s在Java栈中)。如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中,并将此字符串对象的地址赋值给引用s(引用s在Java栈中)。
使用字符串常量池,每当我们使用关键字new(String s=new String(”1”);)创建字符串常量时,JVM会首先检查字符串常量池,如果该字符串已经存在常量池中,那么不再在字符串常量池创建该字符串对象,而直接堆中复制该对象的副本,然后将堆中对象的地址赋值给引用s,如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中,然后在堆中复制该对象的副本,然后将堆中对象的地址赋值给引用s。详情
SurfaceFlinger是Android系统中的一个系统服务,这个系统服务主要实现了Surface的建立、控制、管理等功能,提供系统范围内的surface composer功能,它能够将各种应用程序的2D、3D surface进行组合。详情
在主线程更新UI可以调用invalidate,子线程调用postInvalidate来更新UI。详情
主线程的MessageQueue没有消息时,便阻塞在Looper的queue.next()中的nativePollOnce()方法里,此时主线程会释放CPU资源进入休眠状态,直到下个消息到达或者有事务发生,通过往pipe管道写端写入数据来唤醒主线程工作。这里采用的epoll机制,是一种IO多路复用机制,可以同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作,本质同步I/O,即读写是阻塞的。 所以说,主线程大多数时候都是处于休眠状态,并不会消耗大量CPU资源。详情
init进程是Android系统中用户空间的第一个进程,相关源码位于system/core/init。它被赋予了很多极其重要的工作职责详情:
在Android系统中,JavaVM(Java虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建JavaVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个JavaVM的实例拷贝。详情:
ZygoteInit类的四大功能:
请参考详情
OpenGL是将用数学语言和色彩等信息描述的三维空间物体通过计算转换成二维图像并显示出来的程序库。三维空间中的对象被描述成一系列的顶点(几何对象)或像素(图像)。OpenGL对数据进行几个步骤的处理将其转换成像素,这些数据存放在帧缓存区中形成最终需要显示的图形。
EGL 是渲染 API(如 OpenGL ES)和原生窗口系统之间的接口。通常来说,OpenGL 是一个操作 GPU 的 API,它通过驱动向 GPU 发送相关指令,控制图形渲染管线状态机的运行状态,但是当涉及到与本地窗口系统进行交互时,就需要这么一个中间层,且它最好是与平台无关的。 详情
EGL API 是独立于 OpenGL ES的独立的一套 API,其主要作用是为 OpenGL指令创建 Context 、绘制目标 Surface 、配置 FrameBuffer 属性、Swap 提交绘制结果等。EGL 提供如下机制:
Context的作用: 详情
JNI(Java Native Interface )标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。[详情](https://blog.csdn.net/shulianghan/article/details/18964835
传统java Jni方式:1.编写带有native方法的Java类;2.使用javah命令生成.h头文件;3.编写代码实现头文件中的方法。这种方式必须遵循一定的方法命名格式,native方法名必须带有较长的前缀,不易修改维护。
RegisterNatives方法能帮助你把c/c++中的方法隐射到Java中的native方法,而无需遵循特定的方法命名格式。应用层级的Java类别透过VM而呼叫到本地函数。一般是根据VM去寻找*.so里的本地函数。如果需要连续呼叫很多次,每次都需要寻找一遍,会多花许多时间。此时,组件开发者可以自行将本地函数向VM进行登记,VM调registerNativeMethods()函数的用途有二:
硬件加速是指Android中在View上进行绘制的图形图像都使用GPU来进行绘制,使用硬件加速,在大部分时候都让绘制更加流畅,但付出的代价是需要消耗更多的内存资源。硬件加速在API L14之上是默认开启的,对于基本的View绘制,通过硬件加速可以增加绘图的流程性,但是要注意的是,并不是所有的2D图形绘制API都支持硬件加速。通过开发者选项中的“强制进行GPU渲染”,用户可以为全局打开硬件加速。Android上打开硬件加速之后View通过GPU渲染,关闭的话是使用Android中的2D图形库Skia。 由于硬件加速对某些2D绘图API的不支持,Android系统提供了Application, Activity, Window, View四种级别的控制方式。[详情](https://blog.csdn.net/qq_43666827/article/details/87353184)
this关键字指向的是当前对象的引用。详情
Android 8.0 版本的一项新元素是 Project Treble。这是 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Project Treble 适用于搭载 Android 8.0 及后续版本的所有新设备(这种新的架构已经在 Pixel 手机的开发者预览版中投入使用)。详情
线程池的作用:详情
持续更新中…
若有错误,欢迎留言指正,多谢!
本文参考了很多文章,每个问题的详情附有参考链接。感谢原作者们,如有侵权,请及时联系。
欢迎收藏本文。转载请注明出处。