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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;