自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 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 5922 1

原创 Java方法在art虚拟机中的执行

前言ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式quick code 模式:执行 arm 汇编指令Interpreter 模式:由解释器解释执行 Dalvik 字节码在之前的文章 ART 虚拟机 — Interpreter 模式 中详细介绍了 Interpreter 模式,因此本篇文章将代入一些例子,来帮助大家更好的理解 ...

2018-12-19 09:36:15 2151

原创 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 8820

原创 JSON.parseObject 实例

前言实践一下 JSON 类的 public static final <T> T parseObject(String text, Class<T> clazz) 方法,看一下效果,基于 fastjson-1.2.54.jar 版本Student 类package com.yuanhao.test;public class Student { public St...

2019-01-09 22:16:07 13837

原创 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 2020 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 1057

原创 Android C++ 调用 Java 方法

前言前段时间在写一个特性,需要在 native 层将信息持久化到 dropbox 当中。但是由于在 Android N 上,dropbox 相关的 client 端和 server 端都是由 Java 来实现的,在 native 层并没有相关的代理,因此我们不能在 native 层借助普通的 C++ 调用来实现这个功能,只能调用相关的 Java 方法来实现。本篇文章就来介绍一下 C++ 如何...

2018-08-30 18:21:48 2831 1

原创 ART 虚拟机 — Interpreter 模式

前言ART 虚拟机执行 Java 方法主要有两种模式:quick code 模式和 Interpreter 模式;quick code 模式:执行 arm 汇编指令Interpreter 模式:由解释器解释执行 Dalvik 字节码本篇文章就来讲一下,Interpreter 模式是如何运行的一、 Interpreter 模式 点击查看大图 上图是将断点打在 art_q...

2018-06-18 20:43:26 6467 2

原创 FindClass 流程分析

前言当我们调用 FindClass 时,例如:JNIEnv* envenv->FindClass("java/lang/Class")实际上会经过如下调用栈:_JNIEnv::FindClass() |_ art::JNI::FindClass()本篇文章就来探讨一下 FindClass() 中都干了什么,以及其执行流程。...

2018-06-15 17:10:55 7156

原创 从 Native 函数调用 Java 函数

前言要想深入地理解 art 虚拟机,那么理解 Java 方法在虚拟机当中是如何执行的是必不可少的一环。本篇从 Native 函数调用 Java 函数角度来探讨一下 Java 函数在 art 虚拟机当中的执行。一、调用流程首先,我们用 gdb 将断点打在 art_quick_invoke_stub,观察一下 Native 函数 -> Java 函数的调用栈: 点击查看大...

2018-06-13 18:13:04 2226

原创 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 2013

原创 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 3471

原创 Art 虚拟机的启动

一、zygote 的启动由 init.cpp 加载解析 init.rc 文件

2017-12-20 20:48:30 428

原创 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 338

原创 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 2014

原创 Art 相关文件结构

一、dex 文件结构二、odex 文件结构三、elf 文件结构四、oat 文件结构

2017-11-24 18:48:46 1187

原创 RemoteViews 中暗藏的坑

前言前几天一直在调查一个重启问题,本以为是 fd 泄露导致的,没想到最终发现是 RemoteViews 中的坑导致的。下面我们就以 setImageViewBitmap(int viewId, Bitmap bitmap) 方法为例,讲解一下这个坑。setImageViewBitmap 中的坑首先看一下其具体实现: RemoteViews.java /** * Equivalent

2017-11-10 16:57:47 2030

原创 由一份 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 3943

原创 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 820

原创 Android 虚拟机 — .dex 文件格式

前言  关于 .dex 文件格式,网址 https://source.android.com/devices/tech/dalvik/dex-format 中有极为详尽的描述,讲述的非常清楚,还可以把它当作工具来参考。但只是大体略一遍,印象不会太深刻,因此,我自己写了一个例子拿来分析一下,并给出一些自己的整理和总结。示例public class Hello { private static

2017-10-19 16:31:47 1343

原创 Message 机制 (java 层)

前言Message 机制作为一种系统通信机制,主要涉及到了以下几个部分(java 层):Handler.javaLooper.javaMessage.javaMessageQueue.java其被广泛应用于系统和应用的各处,例如: Message msg = mWorkerHandler.obtainMessage(MSG_HANDLE_PKG_EVENT, event);

2017-09-29 17:28:40 2938

原创 Android 系统服务的两种注册方式

前言查看 SystemServer.java 的 run() 方法,可以看到两种系统服务的注册方式,分别是:ServiceManager.addServicemSystemServiceManager.startService但是,同样是系统服务,为什么他们的注册方式不同呢?下面我们带着疑问来看一下这个问题。一、ServiceManager.addService 方式举例:

2017-09-28 19:38:58 9194

原创 JobScheduler 详解二

前言上篇文章 JobScheduler 详解一讲述了 JobScheduler 的服务启动,本篇文章将继续上篇文章,以 TimeController 为例,讲述 JobScheduler 的 schedule 流程。仍旧使用上篇文章给出的 demo: private static ComponentName sService = new ComponentName("com.exa

2017-08-31 16:13:22 1130

原创 JobScheduler 详解一

前言最近在调查一个 JobScheduler 的问题,看了不少博客和源码,为了防止撂爪就忘,将自己学习到的东西整理一下。 先给出一个自己写的 demo : private static ComponentName sService = new ComponentName("com.example.mi.myjobtest", MyJobService.class.ge

2017-08-31 11:54:26 1575

原创 Cursor 中的观察者模式

前言观察者一setNotificationUri 的流程AbstractCursorsetNotificationUriContentResolverregisterContentObserverContentServiceregisterContentObserverContentServicejava ObserverNodenotifyChange 的流程ContentRes

2017-03-21 22:17:14 691

空空如也

空空如也

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

TA关注的人

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