Android-相关总结-2020.04.03

2023-11-21 09:20
文章标签 android 总结 相关 03 2020.04

本文主要是介绍Android-相关总结-2020.04.03,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.va 相关总结:
VirtualApp在运行时,包含以下三部分:

Main Process
Server Process
VApp Process,进程名io.virtualapp

在新进程中启动组件,会首先创建该应用的 Application,并进行相应系统服务 ( ActivityManager 和 PackageManager )的代理构造和替换。

2.偷渠换柱 (占坑)

StubActivity 会从 Intent 中获取到 client 应用的相关信息,并修改自身 ActivityThread 的 handler。随后调用 startActivity 启动 client 应用。由于之前 Server Process 和 VApp Process 都已完成了相关系统服务的替换,这里会完成 client 应用的 bindApplication 调用、构造 client 应用的 LoadedApk,并通过反射完成真正的Application 和 Activity 的创建。最终,client 应用便运行在了我们的 VApp Process 中。

3.插件化:

双亲委派机制其工作原理的是:

如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,
如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,
如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试
自己去加载,这就是双亲委派模式。

Android 中有两个 ClassLoader 分别为 dalvik.system.DexClassLoader 和 dalvik.system.PathClassLoader

PathClassLoader 不能直接从 zip 包中得到 dex,因此只支持直接操作 dex 文件或者已经安装过的 apk(因为安装过的 apk 在 cache [/data/dalvik-cache] 中存在缓存的 dex 文件)。
DexClassLoader 可以加载外部的 apk\jar\dex 文件,并且会在指定的 outpath 路径存放其 dex 文件。

Android系统通过 Resource 对象加载资源,因此只需要添加资源(即 apk 文件)所在路径到 AssetManager 中,即可实现对插件资源的访问。
调起插件中的 Activity过程:

首先 Activity1 调用 startActivity,实际会调用 Instrumentation 类的 execStartActivity 方法,
通过跨进程的 binder 调用,进入到 ActivityManagerService(AMS)中, ApplicationThread 是
一个 binder 对象,其运行在 binder 线程池中,内部包含一个 H 类,该类继承于 Handler。ApplicationThread 将启动 Activity2 的信息通过 H 对象发送给主线程。主线程拿到 Activity2 的
信息后,调用 Instrumentation 类的 newAcitivity 方法,其内部通过 ClassLoader 创建 Activity2 实例。

4.ARM 常用指令集:
java 虚拟机是基于栈架构的,而 Dalvik 虚拟机是基于寄存器架构的。
常见的 ARM 指令有:

(1)MVN(按位取反)、ADC(带进位的加法指令)、MUL(为 32 位乘法指令)、SDIV(有符号数除法指令)、
ASR(算术右移指令)、LDR(加载存储指令)、STR(将数据存储到指定地址的存储单元)、BL(带链接的
跳转指令,首先将当前指令的下一条指令的地址复制到 R14-LR 寄存器中,在子程序的尾部,通过 
MOV PC,LR 指令返回主程序)(2)BX:带状态切换的跳转指令,如果满足条件 c,处理器会判断 label 指向的 DE 地址的位是否为1,
如果为1,则跳转时自动 将 CPSR 寄存器的标志 T 置位,并将目标地址处的代码解释为 Thumb 代码来执行,
即处理器会切换至 Thumb 状态。BLX (带链接和状态切换的跳转指令)、块数据传输指令(STMDA、LDMDA)、
软中断指令(使用较多的是 SVC 指令,用户态的 ARM 程序通常将系统调用号传入 R7 寄存器,然后使
用 SVC 指令调用 0 号中断来直接执行系统调用)。

注意:Thumb 具用 16 位的指令宽度,第二代 Thumb-2 使用了与 ARM 指令相同的 32 位指令,BX 利用 Rn 寄存器中目的地址值的最后一位来判断跳转后的状态。当最后一位为 0 时,表示转移到 ARM 状态;当最后一位为 1 时,表示转移到 Thumb 状态。无论是 ARM 还是 Thumb,其指令在存储器中都是边界对齐的。(2字节或者4字节对齐,最低位不起作用!)因此,在执行跳转过程中,PC 寄存器中的最低位被舍弃,不起作用。在BX指令的执行过程中,最低位正好被用作状态判断的标志,不会造成存储器访问不对齐的错误。

5.动态代理具体步骤:

通过实现 InvocationHandler 接口创建自己的调用处理器;
通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。

6.内存优化:

稳定(内存溢出、崩溃)
流畅(卡顿)
耗损(耗电、流量、网络)
安装包(APK瘦身)

另外可以:

代码混淆。使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能。
资源优化。比如使用 Android Lint 删除冗余资源,资源文件最少化等。
图片优化。比如利用 AAPT 工具对 PNG 格式的图片做压缩处理,降低图片色彩位数等。
避免重复功能的库,使用 WebP图片格式等。
插件化,比如功能模块放在服务器上,按需下载,可以减少安装包大小.

7.网络分层:

OSI七层模型结构体: 物、数、网、传、会、表、应
TCP/IP 四层模型:数、网、传、应
在这里插入图片描述
注意:

传输层的 TCP 是基于网络层的 IP 协议的,而应用层的 HTTP 协议又是基于传输层的 TCP 协议的,
而 Socket 本身不算是协议,就像上面所说,它只是提供了一个针对 TCP 或者 UDP 编程的接口。
socket (传输层)是对端口通信开发的工具,它要更底层一些。

8.TCP通信过程:

三次握手:

 1.主动发起请求端, 发送 SYN 2.被动建立连接请求端 , 应答 ACK 同时 发送 SYN3.主动发起请求端,发送应答 ACK* 标志 TCP 三次握手建立完成。 —— server:Accept() 返回 。— client:Dial() 返回。

四次挥手:

 1.主动关闭连接请求端, 发送 FIN2.被动关闭连接请求端 ,应答 ACK标志。半关闭完成。 —— close()3.被动关闭连接请求端 ,发送 FIN4.主动关闭连接请求端,应答 ACK标志。四次挥手建立完成。 —— close().

9.GET 和 POST 区别:
客户端在使用HTTPS方式与Web服务器通信时有以下几个步骤:

(1)客户使用 https 的 URL 访问 Web 服务器,要求与 Web 服务器建立 SSL 连接。
(2)Web 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
(3)客户端的浏览器与 Web 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。
(4)客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web 服务器利用自己的私钥解密出会话密钥。
(6)Web 服务器利用会话密钥加密与客户端之间的通信。

这篇关于Android-相关总结-2020.04.03的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401403

相关文章

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络