Android
文章平均质量分 94
啃着地瓜数星星
这个作者很懒,什么都没留下…
展开
-
JobScheduler 详解一
前言最近在调查一个 JobScheduler 的问题,看了不少博客和源码,为了防止撂爪就忘,将自己学习到的东西整理一下。 先给出一个自己写的 demo : private static ComponentName sService = new ComponentName("com.example.mi.myjobtest", MyJobService.class.ge原创 2017-08-31 11:54:26 · 1464 阅读 · 0 评论 -
SignalCatcher
一、SignalCatcher 线程的启动1.1 StartSignalCatcherruntime.ccvoid Runtime::InitNonZygoteOrPostFork( JNIEnv* env, bool is_system_server, NativeBridgeAction action, const char* isa) { ... StartSignalCatc原创 2017-12-27 17:26:50 · 3332 阅读 · 0 评论 -
Service 'zygote' killed by signal 1
一、问题描述01-07 21:57:03.228 1690 2829 D ActivityManager: cleanUpApplicationRecord -- 576201-07 21:57:03.232 1690 1702 W WindowManager: Attempted to remove non-existing token: android.os.Binder@333a8原创 2018-01-25 22:20:27 · 8653 阅读 · 0 评论 -
list_for_each(pos, head)、list_for_each_entry(pos, head, member)
一、list_headLinux 内核定义了 list_head 数据结构,字段 next 和 prev 分别表示通用双向链表向前和向后的指针元素。不过,值得特别关注的是,list_head 字段的指针中存放的是另一个 list_head 字段的地址,而不是含有 list_head 结构的整个数据结构地址用 list_head 数据结构构造的一个双向链表如下所示:二、list_f原创 2018-01-18 15:05:35 · 1921 阅读 · 0 评论 -
从 Native 函数调用 Java 函数
前言要想深入地理解 art 虚拟机,那么理解 Java 方法在虚拟机当中是如何执行的是必不可少的一环。本篇从 Native 函数调用 Java 函数角度来探讨一下 Java 函数在 art 虚拟机当中的执行。一、调用流程首先,我们用 gdb 将断点打在 art_quick_invoke_stub,观察一下 Native 函数 -> Java 函数的调用栈: 点击查看大...原创 2018-06-13 18:13:04 · 2107 阅读 · 0 评论 -
FindClass 流程分析
前言当我们调用 FindClass 时,例如:JNIEnv* envenv->FindClass("java/lang/Class")实际上会经过如下调用栈:_JNIEnv::FindClass() |_ art::JNI::FindClass()本篇文章就来探讨一下 FindClass() 中都干了什么,以及其执行流程。...原创 2018-06-15 17:10:55 · 6720 阅读 · 0 评论 -
ART 虚拟机 — Interpreter 模式
前言ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式;quick code 模式:执行 arm 汇编指令Interpreter 模式:由解释器解释执行 Dalvik 字节码本篇文章就来讲一下,Interpreter 模式是如何运行的一、 Interpreter 模式 点击查看大图 上图是将断点打在 art_q...原创 2018-06-18 20:43:26 · 6161 阅读 · 2 评论 -
Android C++ 调用 Java 方法
前言前段时间在写一个特性,需要在 native 层将信息持久化到 dropbox 当中。但是由于在 Android N 上,dropbox 相关的 client 端和 server 端都是由 Java 来实现的,在 native 层并没有相关的代理,因此我们不能在 native 层借助普通的 C++ 调用来实现这个功能,只能调用相关的 Java 方法来实现。本篇文章就来介绍一下 C++ 如何...原创 2018-08-30 18:21:48 · 2681 阅读 · 1 评论 -
Android 中 vector 反汇编示例
前言最近遇到一个 native crash 问题,如下所示:(Android 8.1)Revision: '0'ABI: 'arm64'pid: 1863, tid: 3348, name: Binder:1863_F >>> system_server <<<signal 11 (SIGSEGV), cod原创 2018-09-19 21:54:20 · 996 阅读 · 0 评论 -
ClassNotFoundException 案例
前言10-21 09:54:53.620 10150 22000 22000 E AndroidRuntime: FATAL EXCEPTION: main10-21 09:54:53.620 10150 22000 22000 E AndroidRuntime: Process: com.baidu.searchbox, PID: 2200010-21 09:54:53.620 10150...原创 2018-10-29 18:24:29 · 1947 阅读 · 1 评论 -
Java方法在art虚拟机中的执行
前言ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式quick code 模式:执行 arm 汇编指令Interpreter 模式:由解释器解释执行 Dalvik 字节码在之前的文章 ART 虚拟机 — Interpreter 模式 中详细介绍了 Interpreter 模式,因此本篇文章将代入一些例子,来帮助大家更好的理解 ...原创 2018-12-19 09:36:15 · 1993 阅读 · 0 评论 -
Watchdog 工作机制解析
一、Watchdog 的初始化1.1 startOtherServices()SystemServer.javaprivate void startOtherServices() { ... // 创建 watchdog【1.2节】 final Watchdog watchdog = Watchdog.getInstance(); // init watchdog【1原创 2017-12-07 11:41:00 · 1936 阅读 · 0 评论 -
Art 相关文件结构
一、dex 文件结构二、odex 文件结构三、elf 文件结构四、oat 文件结构原创 2017-11-24 18:48:46 · 929 阅读 · 0 评论 -
Cursor 中的观察者模式
前言观察者一setNotificationUri 的流程AbstractCursorsetNotificationUriContentResolverregisterContentObserverContentServiceregisterContentObserverContentServicejava ObserverNodenotifyChange 的流程ContentRes原创 2017-03-21 22:17:14 · 594 阅读 · 0 评论 -
JobScheduler 详解二
前言上篇文章 JobScheduler 详解一讲述了 JobScheduler 的服务启动,本篇文章将继续上篇文章,以 TimeController 为例,讲述 JobScheduler 的 schedule 流程。仍旧使用上篇文章给出的 demo: private static ComponentName sService = new ComponentName("com.exa原创 2017-08-31 16:13:22 · 1058 阅读 · 0 评论 -
Android 系统服务的两种注册方式
前言查看 SystemServer.java 的 run() 方法,可以看到两种系统服务的注册方式,分别是:ServiceManager.addServicemSystemServiceManager.startService但是,同样是系统服务,为什么他们的注册方式不同呢?下面我们带着疑问来看一下这个问题。一、ServiceManager.addService 方式举例:原创 2017-09-28 19:38:58 · 8770 阅读 · 0 评论 -
Message 机制 (java 层)
前言Message 机制作为一种系统通信机制,主要涉及到了以下几个部分(java 层):Handler.javaLooper.javaMessage.javaMessageQueue.java其被广泛应用于系统和应用的各处,例如: Message msg = mWorkerHandler.obtainMessage(MSG_HANDLE_PKG_EVENT, event);原创 2017-09-29 17:28:40 · 2403 阅读 · 0 评论 -
Dalvik 字节码的读取
前言想要读取 Dalvik 字节码,需要参考两篇说明文档,分别是:字节码格式 和 Dalvik 可执行指令格式,下面以我的上篇博文 Android 虚拟机 — .dex 文件格式 中的例子为例,实战讲解一下 Dalvik 字节码怎么读取。例一1.170 10 03 00 00 00 0e 00上面是例子的 .dex 文件中第一个 code_item 对应的字节码数组。 首先,第一个 8 位运算码为原创 2017-10-24 09:56:12 · 720 阅读 · 0 评论 -
由一份 log 看 Binder
前言前段时间调查一个死机重启问题,里面涉及到 Binder 调用的一些比较细节的地方,因此将 binder 调用的整个过程大致缕了一遍,并将所得整理下来。问题 log10-17 12:13:02.006 2096 5712 E JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across原创 2017-11-06 12:00:28 · 3749 阅读 · 3 评论 -
RemoteViews 中暗藏的坑
前言前几天一直在调查一个重启问题,本以为是 fd 泄露导致的,没想到最终发现是 RemoteViews 中的坑导致的。下面我们就以 setImageViewBitmap(int viewId, Bitmap bitmap) 方法为例,讲解一下这个坑。setImageViewBitmap 中的坑首先看一下其具体实现: RemoteViews.java /** * Equivalent原创 2017-11-10 16:57:47 · 1843 阅读 · 0 评论 -
Android Init Language
Android Init Language 包含五种语句,分别是 Actions、Commands、Services、Options 以及 Imports.Actions 和 Services 隐式地声明了一个新的 section,所有的 Commands 和 Options 都属于最近声明的 section,在第一个 section 之前的 Commands 和 Options 会被忽略Act原创 2017-12-19 19:57:37 · 296 阅读 · 0 评论 -
Art 虚拟机的启动
一、zygote 的启动由 init.cpp 加载解析 init.rc 文件原创 2017-12-20 20:48:30 · 366 阅读 · 0 评论 -
Android 虚拟机 — .dex 文件格式
前言 关于 .dex 文件格式,网址 https://source.android.com/devices/tech/dalvik/dex-format 中有极为详尽的描述,讲述的非常清楚,还可以把它当作工具来参考。但只是大体略一遍,印象不会太深刻,因此,我自己写了一个例子拿来分析一下,并给出一些自己的整理和总结。示例public class Hello { private static原创 2017-10-19 16:31:47 · 1159 阅读 · 0 评论 -
notification使用不当导致的死机重启问题分析(Could not copy bitmap to parcel blob. )
前言前段时间遇到了一个死机重启问题,比较复杂,涉及到多方面的知识,我也分析了很长的时间,期间学到了很多东西,现在把分析的过程整理一下,希望可以给大家一点帮助和启发,同时也帮助自己再巩固一下。一、问题的复现首先说一下问题最开始的分析思路以及复现的过程,log 中最核心的部分如下所示:10-17 12:13:02.004 2096 4139 W art : Large object alloc...原创 2018-12-19 10:58:44 · 5661 阅读 · 1 评论