自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(170)
  • 资源 (6)
  • 问答 (1)
  • 收藏
  • 关注

原创 3.消息机制总结——总结

Handler 机制的底层逻辑就是利用 epoll + eventfdAndroid2.3开始 Google把Handler的阻塞/唤醒方案从Object#wait()/notify(),改为Linux epoll实现,why?原因在于,native也引入了消息管理机制,用于提供个C/C++开发者使用,而现有的阻塞唤醒只支持java,Native也希望想java一样,main线程没有消息时进入阻塞状态,有到期消息需要执行几时过来处理?How?java通过jni调用Navie状态进入阻塞态如果只

2024-09-28 17:04:36 465

原创 算法 链表逆置

【代码】算法 链表逆置。

2024-08-18 17:05:55 132

原创 数组按频率降序

c++ 可以用 std::sort() 函数。上述java代码的c++实现。

2024-08-18 11:13:01 258

原创 Linux socket

socket 是一种 IPC 方法,它允许位于同一主机(计算机)或使用网络连接起来的不同主机上的应用程序之间交换数据。

2024-08-12 23:57:16 609

原创 java 异常堆栈的由来

编写的程序代码内部错误产生的异常,如调用对象为空(空指针异常)、数组越界异常、除0异常等。这种通常称为未检查的异常(Runtime异常子类),在虚拟机中执行时会集中处理这些异常。其他运行中异常,通过throw语句主动抛出的异常。这类异常称为检查异常,一般是程序认为自己遇到了严重的问题,后续再运行可能会出问题,主动告知方法调用者一些必要的信息。Art虚拟机对该throw异常,**遍历线程方法栈寄存器和PC指针寄存器, 得到函数方法调用栈等信息,**最终用setException方法保存在tlsPtr变量

2024-08-11 16:32:05 158

原创 稳定性二——JE流程及处理方法

这里,RunntimeInit初始化了两个handler,一个是preHandler(LoggingHandler),一个是defaultHangler(KillApplicationHandler)。两个类都继承于Thread.UncaughtExceptionHandler,实现其中的uncaughtException方法。

2024-08-02 00:06:32 706

原创 ptrace

进程状态S:Interruptible Sleeping,即可中断睡眠;D:Uninterruptible Sleeping,即不可中断睡眠;R:Running or Runnable,即运行状态;Z:Zombie,即僵尸状态;T:Stopped or Traced,即中止状态(注意是“中止”而非“终止”)。execl语句可以将当前进程替换成一个新进程。在本例中,execl(“/bin/ls”, “ls”, “-l”, “-h”, NULL);语句将原本的子进程替换成了一条ls命令。

2024-07-31 23:54:35 501

原创 backtrace

arm平台的调用栈与x86平台的调用栈大致相同,稍微有些区别,主要在于栈帧的压栈内容和传参方式不同。在arm平台的不同程序,采用的编译选项不同,程序运行期间的栈帧也会不同。有些工具在对arm的调用栈回溯时,可能会遇到无法回溯的情况。例如gdb在使用bt查看core dump文件调用栈时,有时会出现的情况,有可能就是栈空间的压栈顺序导致的。当工具无法回溯时,就需要人工结合汇编代码对栈进行回溯,或者使用unwind进行回溯。

2024-07-27 12:13:04 494

原创 一个死锁的案例

但是实际上,这个第二次的 log 意义并不大,因为这个时候系统 ANR,需要检查的是系统为什么出现 ANR,也就是说第一次 traces 的log 可能在后面的 debug 中起到关键因素。是在 startService() 的时候占用了AMS 这把锁,但是后面又在等 PermissionDialogReqQueue 的锁,这个锁是自己锁上的并没有放出来,导致了一连串的死锁。同样的,根据上面第 1.5 点,来看下 AMS 中的Handler 也触发了 WatchDog。

2024-07-09 01:13:49 256 2

原创 ANR日志输出

总结一下上面代码,这段代码并没有真正的执行dump操作,只是确定了trace文件路径,如果”dalvik.vm.stack-trace-dir”这个属性没有配置,就使用旧的dump策略,trace信息写入到全局trace文件/data/anr/traces.txt中,删除旧的traces文件,创建新的traces文件;5. 我们需要通过源码可以发现,当发生的是后台进程ANR,会少收集很多的信息,比如CPU使用率,CPU占比较高的5个应用,NATIVE进程情况。,此时需要结合eventlog进一步分析。

2024-07-09 00:45:19 897

原创 稳定性四—NE流程及分析方法

连接到bionic上的native程序(C/C++)出现异常时,

2024-07-04 23:43:15 550

原创 Linux进程内存—— VSS、RSS、PSS、USS及查看方式

VSS虚拟耗用内存大小,是进程可以访问的所有虚拟内存的总量,包括进程独自占用的物理内存、和其他进程共享的内存、分配但未使用的内存。RSS驻留内存大小,是进程当前实际占用的物理内存大小,包括进程独自占用的物理内存、和其他进程共享的内存。PSS比例驻留内存大小,包括进程独自占用的物理内存、比例分配和其他进程共享的内存(共享库内存会均分到各个共享进程)。USS独立内存大小,表示进程独自占用、不与其他进程共享的物理内存。

2024-06-30 00:16:16 2080 1

原创 android_内存分析 (dumpsys meminfo)

PSS 这是一种按照比列来划分内存的统计方法。比如一个共享库占1G。由两个进程共享,那么PSS的计算方式就是,将1G一分为2。分别为512MPrivate Dirty:其中Private表示只有本进程可访问。Dirty表示还没有写回磁盘。举例如下:如上图第一行表示,分配给本进程的,已经被修改,但未写入磁盘的Native Heap大小为107140KB。Private Dirty 进程本身使用的内存总数,包含了进程主动申请的以及修改的继承自Zygote的内存。其实。例如。

2024-06-29 23:05:09 1765

原创 Linux应用编程基本概念

Linux应用编程基本概念。

2024-06-23 21:47:56 353

原创 android13 应用冷启动

1 概述launcher 通过binder到systemserver中atms中发送startActivity请求startProcess向zygote发送启动新进程请求zygote收到请求,fork新进程并调用ActivityThread的main初始化新进程启动,发送attachApplication给ams,告诉他新进程启动成功ams收到新进程启动成功的消息,做一系列准备工作,ActivityTaskSupervisor的realStartActivityLocked方

2024-06-15 22:01:53 1060 1

原创 kmalloc kzalloc vmalloc区别

【代码】kmalloc kzalloc vmalloc区别。

2024-04-21 10:34:58 308

原创 C++ iovec结构体

iovec是一个结构体,用于描述一个数据缓冲区。它通常与readv和writev系统调用一起使用,用于在一次系统调用中读取或写入多个缓冲区。下面demo演示读取多个缓冲区的数据 fd是文件描述符,iov是iovec结构体数组,iovcnt是数组元素个数。如何使用iovec结构体和readv/writev系统调用。

2024-04-20 20:05:40 467 1

原创 PackageManagerService概述

判断是否是继续安装还是全新安装,继续安装情况下,获取之前的 sessionId 和 installId,并且根据 installId 注册安装监听;对于全新安装情况,需要根据传入的 apk 信息组装会话参数 SessionParams 对象,并以此创建新的 sessionId,注册新的观察监听安装事件。谷歌有4.4 dalvik 切到ART,应用安装的时候会启动dex2ota,把dex预编译成ELF文件,每次运行程序的时候不用重新编译,是真正意义的本地应用。OtaDexoptService 服务。

2024-04-15 22:39:24 188 1

原创 0图形系统概述

[在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a99d785a8338402ea4e54c96a8fe8237.png。

2024-04-12 00:14:58 162

原创 图形系统——0

2024-04-11 23:32:06 123

原创 零长数组,what&why

数组名在作为函数参数传递时,确实传递的是一个地址,但数组名绝不是指针,两者不是同一个东西。数组名用来表征一块连续内存存储空间的地址,是个常量,表示一个地址,而指针是一个变量,编译器要给它单独再分配一个内存空间,用来存放它指向的变量的地址。问什么不用指针代替零长数组?

2024-04-04 19:56:22 466

原创 前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal)

【代码】前序遍历 (preorder traversal) - 中序遍历 (inorder traversal) - 后序遍历 (postorder traversal)

2024-04-03 22:14:55 231

原创 wait/notify await/signal yield join

wait awaitwait/notify/nitifyAll Object中的方法,当线程调用wait()方法,当前线程释放对象锁,进入等待队列,只到被notify唤醒await/signal/signalall java.util.concurrent类库中提供的Condition类来实现线程之间的协调Thread.yield():一定是当前线程调用此方法,当前线程放弃获取CPU的时间片,由运行态转变为就绪态,让操作系统中再次选择线程执行。作用:让相同优先级的线程轮流执行,但并不能保证轮流执行

2024-03-23 19:50:12 252

原创 throws vs throw

【代码】throws vs throw。

2024-03-16 22:24:41 442

原创 perfetto详解

可以将Perfetto理解为systrace的升级版,用在更新的平台、新图表展示更多的信息。它可帮助开发者收集 Android 关键子系统(如SurfaceFlinger/SystemServer/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

2024-03-16 21:24:53 1708

原创 快稳省工具总结

ftrace、

2024-03-16 21:21:42 437

原创 稳定性三——wachdog机制与分析方法

最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序“跑飞”,造成整个系统无法正常工作,因此,引入了一个“看门狗”,对单片机的运行状态进行实时监测,针对运行故障做一些保护处理,譬如让系统重启。这种Watchdog属于硬件层面,必须有硬件电路的支持。Linux也引入了Watchdog,在Linux内核下,当Watchdog启动后,便设定了一个定时器,如果在超时时间内没有对/dev/Watchdog进行写操作,则会导致系统重启。

2024-03-10 22:35:09 1606

原创 c++知识点

自行给指针动态分配空间否则对象回收的时候,会调用析构函数,回收两次,出现错误。

2024-03-10 20:49:53 897

原创 构造函数总结

移动构造函数 未完待续。

2024-03-10 20:45:09 396

原创 cpu 性能分析基础

单核CPU一次只能运行一个进程或线程,超线程除外,看上去多个任务在同时运行,其实是Linux内核在不同的进程间切换,公平地分配CPU时间片,这便是上下文切换。内核调度,会周期性地中断正在运行的进程,切换其它进程,引起上下文切换。如果上下文切换明显多于定时器中断,那么可能是IO请求或长时间的系统调用造成的,在这种操作不能立即完成的情况下,为了提高CPU效率,内核也会调度进程,发生上下文切换。在一定的时间内,可运行进程个数的平均值,包括正在运行的进程,即平均负载,这个时间一般为1分钟、5分钟、15分钟。

2024-03-02 20:43:24 488

原创 automative

car sevicecar-lib。

2024-02-08 20:33:27 433

原创 JE调用流程

1.1LoggingHandlerUncaughtExceptionHandler只定义了一个接口方法 当线程因为未捕获的异常停止时,Java 虚拟机会调用 uncaughtException() 函数。可以看出,uncaughtException() 是在crash 最开始调用的,用以输出crash 开头信息1.3 KillApplicationHandlerKillApplicationHandler 类,以及构造中传入的LoggingHandler,都是实现UncaughtExceptio

2024-01-21 22:43:12 913 1

原创 稳定性一——ANR

如果有发现某个线程的堆栈,包含此字样,可进一步看其堆栈,确定是调用了什么系统服务。main log可以得到anr基本信息,要得到阻塞的地方,还得靠trace文件,一般在/data/anr目录下,可在找个trace文件中搜索主线程堆栈。可知80这个等级是很严重的,应用马上就要被杀死,被杀死的这个应用从名字可以看出来是桌面,连桌面都快要被杀死,那普通应用能好到哪里去呢?可以从log中看到,发生anr的时候,Top进程的Cpu占用情况,user代表是用户空间,kernel是内核空间,一般的有如下的规。

2023-10-27 00:51:23 806

原创 2.android消息机制-native

它就是一个int值,又叫做句柄,在Linux中,打开或新建一个文件,它会返回一个文件描述符,读写文件需要使用文件描述符来指定待读写的文件,所以文件描述符就是指代被打开的文件,所有对这个文件的IO操作都要通过文件描述符。pollInner方法返回一个int值result,代表着本次轮询是否成功处理了消息,当result不等于0时,就会跳出循环,,等到下一个消息到达(mWakeEventFd会往管道写入字符)或监听的其他事件发生时就会唤醒线程,然后处理消息,只要epoll_wait方法返回后,都会进入。

2023-05-19 23:54:53 786 1

原创 6.hal服务sepolicy 以sensor hal为例

【代码】6.hal服务sepolicy 以sensor hal为例。

2023-04-26 00:40:28 1040

原创 5.添加native服务

待补充。

2023-04-26 00:13:24 159

原创 6.关于系统服务的思考—— native vs java

app与FregService .activity onCreate中。// 获得一个名称为“ freg ”的服务的 Binder 代理对象接口。java 服务 app 系统应用 三方应用。hal 服务可以直接给app调用。

2023-02-19 20:43:47 450

原创 linux ipc

消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题共享内存区:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题,相当于线程中的线程安全,当然,共享内存区同样可以用作线程间通讯,不过没这个必要,线程间本来就已经共享了同一进程内的一块内存信号: 传递字符串消息只能在同一程序下的进程间信号量:不能传递复杂消息,只能用来同步 ,通常配合消息队列、共享内存使用。

2023-02-14 01:39:01 335

原创 深入理解Android sensor

整个android sensor模块的核心是SensorService,应用通过SensorManager与其交互,SensorService基本上管理sensor的所有行为,包括1.1.2 jni通过对JNI的了解 System.loadLibrary(“android_servers”); 会去查找libandroid_servers.so 这个库文件1.1.3 native (SensorService)BinderService 是 Android Service 框架的主要类,是

2022-12-18 00:39:20 1647

原创 4. 添加Java服务

定义aidl接口}frameworks/base/Android.bp framework-defaults 模块中添加我们刚刚加的 aidl 文件mm成功,会有hello目录IHelloService.java。

2022-11-04 01:19:22 639

app Binder使用

app Binder使用

2025-04-02

android 表情解决方案

android 表情解决方案

2016-07-21

ANDROID表情解决方案

ANDROID表情解决方案

2016-07-21

android 下载demo

一种基于原生系统的下载demo,支持断点续传,支持多线程下载

2016-07-04

android 验证码

android 验证码

2016-06-28

自定义view

自己写的关于自定义View

2016-06-27

collapsibletextviewdemo

一张可以展开收起的TextView

2016-04-24

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

TA关注的人

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