自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

只有静静努力,才能默默躺平~

欢迎访问我的个人网站:www.quexiaolong.xyz

  • 博客(22)
  • 资源 (1)
  • 收藏
  • 关注

原创 Gallery2分析

Gallery2主要功能是实现Android系统本地存储以及网络存储中的媒体(图片&视频)资源的浏览,媒体信息,显示和更多操作(删除、分享、选择、缩放、编辑等)。

2023-10-05 15:38:58 988 1

原创 Context应用上下文理解

说明:该Context类的实现类为ContextIml,该类实现了Context类的功能。Context类 ,说它熟悉,是应为我们在开发中时刻的在与它打交道,例如:Service、BroadcastReceiver、Activity等都会利用到Context的相关方法。说明:正如其名称一样,该类只是对Context类的一种包装,该类的构造函数包含了一个真正的Context引用,即ContextIml对象。熟悉了Context的继承关系后,我们接下来分析应用程序在什么情况需要创建Context对象的?

2023-10-05 15:33:52 222

原创 谈谈SSAID

以下内容转载自Android 开发人员文档(针对 API > 26)说明了有关ANDROID_ID的以下内容:在 Android 8.0(API 级别 26)和更高版本的平台上,一个 64 位数字(表示为十六进制字符串),对于应用签名密钥、用户和设备的每个组合都是唯一的。ANDROID_ID 的值受签名密钥和用户的限制。如果在设备上执行恢复出厂设置或 APK 签名密钥更改,则该值可能会更改。

2023-02-08 15:25:24 1210 1

原创 Android原生应用保活机制

由此可以看到persistent进程被杀后,触发了进程启动时和AMS之间的binder墓碑机制走到cleanUpApplicationRecordLocked方法,针对persistent应用AMS会重新拉起新的进程。虽然persistent特性的应用进程oom_adj是-800很难被系统杀掉,但不排除其他因素导致应用进程被杀,比如我们通过命令adb shell kill -9 xxx即可杀掉某个进程。查看进程的oom_adj值是-800,优先级非常高,可以看出带persistent的进程很难被系统杀死。

2023-02-07 15:02:31 1397

原创 Android12 源码下载、编译、刷机、单编调试Framework

由于在国内使用 Google 的官方下载站点,会有下不动的情况,有时候 .repo 都下载不下来,所以本教程是以国内的镜像站点为例子,如果你有方法可以爬墙,那么可以简单参考 官方的教程 https://source.android.google.cn/source/downloading。代码下载完成之后,我们先不着急编译,如果要想在真机上跑,需要下载一些厂商闭源的驱动文件,这样后续编译的代码才可以跑到真机上,此处对应的。直接下载的代码使用的是 master 分支,驱动程序需要在这里下载。

2022-11-10 22:16:23 9798 4

原创 引用的基础知识(定义和函数参数)

第一个方法输出的值表明a和b的变量值并没有交换,因为传参只是做了赋值操作,方法体内的交换只是方法参数的交换,不影响a和b变量;而第二(指针)和第三个(引用)方法都实现了变量值交换,其中通过引用的方式实现交换是最简洁的实现。变量从内存的角度理解,其实就是指向了一段内存空间的地址。我们可以给变量创建别名,这个别名就是引用。输出的结果看出,b和c都是变量a的引用,a变量的值发生变化后,引用对应的值也改变。注意:普通的引用需要初始化 ,如果引用作为函数传参可以不用初始化。

2022-11-07 15:39:41 413

原创 const的基础知识

const int a = 5 约等于 define int a = 5constdefine宏定义在编译阶段处理在编译预处理阶段处理提供类型检查和作用域检查只是单纯的替换,取消使用#undefine。

2022-11-07 12:48:19 193

原创 GitHub管理代码仓库

GitGit 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。简单点理解通过Git可以很方便地管理你的工程代码以及版本。

2022-10-30 22:19:08 1717

原创 通过samba访问Linux服务器共享文件夹

最近入职新公司,习惯了用Mac开发,新公司AOSP工程源码同步到一个编译服务器。为了提高代码阅读、修改和编译的效率,参考网上的指导实现macOS上用samba访问编译服务器的共享目录。

2022-10-18 22:32:22 799

原创 C++基础

思考:C++编译器是如何处理多个对象以及调用类的成员函数的?半径,周长和面积都用实数表示;4)输出半径r,周长和面积;3)计算面积=3.1415。

2022-10-09 17:04:44 343

原创 编译器对类对象的处理机制

C++编译器对类对象的处理机制

2022-09-30 21:58:36 182

原创 Android5.0 Alarm服务简单分析

从Android 4.4版本开始引入了Exact闹钟的概念,既然有Exact(精确),那自然有非精确,但为了兼容旧版本,可以看到legacyExactLength方法中,如果sdkVersion是API19(Android4.4)之前的,所有的闹钟都是精确的闹钟,否则是Heuristic的。翻译:从API19开始,通过这个方法设置的alarm都被认为是非精确的,这个alarm不会再设置的时间点之前触发,但可能会再设置的时间点后适当延迟触发。下图1是alarm触发的一个大致流程。

2022-09-11 13:10:34 207

转载 Android屏幕刷新显示机制

本文是通过阅读各种文章及代码,总结出来的,其中难免有些地方理解得不对,欢迎大家批评指正。在一个典型的显示系统中,一般包括CPU、GPU、display三个部分, CPU负责计算数据,把计算好数据交给GPU,GPU会对图形数据进行渲染,渲染好后放到buffer里存起来,然后display(有的文章也叫屏幕或者显示器)负责把buffer里的数据呈现到屏幕上。很多时候,我们可以把CPU、GPU放在一起说,那么就是包括2部分,CPU/GPU 和display(本文主要按后面这种分类来解释)。tearing: 一个屏

2022-07-14 01:12:11 873

原创 应用启动过程(Activity的启动过程)

在上一篇Android应用启动类型介绍文章介绍了Android应用启动的类型和之间的区别,接下来学习Android应用的启动过程,应用的启动过程相对来说代码流程比较繁琐,我认为不必每个代码细节点都要完全了解,化繁为简,抓住几个重要的阶段分析即可。我的学习路线是从应用启动场景->应用启动的类型->应用启动/退出时的关键log->应用启动过程几个主要进程的交互->应用进程和SystemServer的绑定和Activity的生命周期执行到最终显示 这几个阶段学习整个启动流程即可。用户角度:桌面点击应用图标启动、最

2022-07-14 00:42:00 1694

原创 Android应用启动类型介绍

在学习一个应用的主Activity启动的详细流程前,我们可以先了解Android应用的启动类型,对应用的启动有个初步认知。从性能的角度,应用启动类型一般分为冷启动、热启动和温启动。其中应用冷启动的耗时较长,很多手机厂商为了能够在应用启动速度这块有个良好的体验,一般会做一些手段,比如智能预加载等。下面简要介绍下应用冷启动和热启动:冷启动的基本过程:系统层:1、加载并启动应用。2、启动后加载启动动画(一般是桌面应用或者框架层来实现)。3、创建应用进程。应用进程:1、应用进程被Zygote创建后,将会创建

2022-07-02 17:34:22 1225

翻译 抓开机trace的方法

https://source.android.com/devices/tech/perf/boot-timessystrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。(不过,如果要查看整个启动过程中的平均数量或累计数量,直接查看内核跟踪记录更为方便)。如需在启动过程中启用 systrace,请执行以下操作:在 frameworks/native/cmds/atrace/atrace.rc 中,更改以下行:更改为:这将启用跟踪功能(

2022-06-30 18:21:33 1422

原创 AMS学习笔记(一)

AMS是系统的一个管理和调度服务,服务由SystemService进程启动。应用进程以及四大组件的管理(启动,切换和调度)都是由AMS来实现;AMS是Android Framework中一个非常重要的系统服务,由于太过于庞大,我的学习思路和大纲是:一、AMS的启动过程;二、AMS在应用的启动流程中的角色;三、Activity生命周期的管理;四、Broadcast广播的处理流程;五、Service的启动和管理流程;六、ContentProvider的管理;七、AMS中的进程管理;AMS是在Sy

2022-06-22 20:50:58 612

原创 Android消息机制Handler、Thread、HandlerThread理解

最近重新看回AMS的启动过程,发现AMS的构造方法里创建了几个前台线程,有以下几点疑问。疑问HandlerThread是什么?MainHandler初始化传入的是前台线程的Looper对象,这说明什么?MainHandler收到消息队列的消息后,执行代码跑在主线程还是前台线程?Handler1.Handler的一般用法在应用程序开发中,如果直接在主线程中跑耗时的操作(比如下载),会导致主线程阻塞,超过5s会触发ANR,这时候我们会新开一个子线程执行耗时操作,同时通过Handler来通知主线

2022-06-19 18:36:24 542

原创 Android通过Socket实现局域网通信例子

最近工作上涉及比较多局域网连接和通信的业务需求,发现自己在这块一直是一个空缺,因此在网上找了一些资料,也在AS上试着验证,基本没有什么问题。好了,不多说,直接上代码。首先是Server端的代码实现:1)MainActivity.javapackage com.example.socketserver;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;import andro

2021-11-14 12:52:24 3464 2

原创 Android显式Intent和隐式Intent

要启动一个Activity有两种方法,一种是通过显式Intent启动,而另一种是通过隐式Intent启动。一、显示Intent显示Intent是明确目标Activity的类名。1、通过Intent(Context packageContext, Class<?> cls)构造方法该方法是最常用的,只适用于当前应用,只能启动本应用中的Activity。Intent intent = new Intent(this, SecondActivity.class); sta.

2021-04-04 22:52:03 497

原创 Android属性之build.prop生成过程

Android的build.prop文件是在Android编译时刻收集的各种property(LCD density/语言/编译时间, etc.),编译完成之后,文件生成在out/target/product/<board>/system/目录下。在Android运行时刻可以通过property_get()[c/c++域] / SystemProperties_get*()[Java域]读取这些属性值。build.prop的生成是由make系统解析build/core/Makefile完

2020-10-06 23:08:32 840

原创 Android5.0 Alarm服务简单分析

Alarm的触发过程下图1是alarm触发的一个大致流程。首先应用会调用AlarmManager提供的set接口,将一个含有触发时间和触发事件的alarm对象添加到一个由AlarmManager服务维护的alarm列表中,同时alarm列表会计算出最优先的alarm对象(最先起来)设置到底层RTC设备中。但这个时间点到了,RTC会上发信息并通知AlarmManager服务去触发相应的事

2017-02-07 23:50:52 973

SocketDemo.rar

Android局域网连接通信Demo

2021-11-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除