android 开发技术
文章平均质量分 94
基于android-10.0.0_r36代码,分析android系统中的代码流程,以及平时解决问题的记录
chadm
这个作者很懒,什么都没留下…
展开
-
android webview loadUrl实现原理浅析
先简单介绍一下android里面navive和js互相调用Android与JS通过WebView互相调用方法(二者沟通的桥梁是WebView),实际上是:Android去调用JS的代码JS去调用Android的代码对于Android调用JS代码的方法有2种:通过 WebView.loadUrl()通过 WebView.evaluateJavascript()对于JS调用Android代码的方法有3种:通过 WebView.addJavascriptInterface() 进行对象映原创 2021-01-13 15:40:54 · 8145 阅读 · 2 评论 -
android Handler sendMessageDelayed实现原理
之前在看分析Handler实现原理的,有注意到sendMessageDelayed这个方法,最终都调用到了MessageQueue的enqueue方法,最终都到MessageQueue里面的next方法,至于具体怎么实现delay的,没有仔细研究,今天记录一下主要包括2部分的内容:Handler sendMessageDelayed实现原理延时任务实现的几种方式(针对sendMessageDelayed的一些扩展思考)Handler的实现原理,可以参考我之前写的 android Handler消原创 2021-01-11 12:32:54 · 2405 阅读 · 0 评论 -
android里面的Service的一些理解
android系统里面的Service是平时接触很多的,主要分为2类,系统服务SystemService和用户自定义服务Service。有2种方式可以获取系统服务ContextImpl.getSystemService 是Android提供获取系统服务的API接口,返回保存SystemServiceRegistry 类里面的系统服务,类似ActivityManager,里面有一个IActivityManager,通过Binder和ActivityManagerService的通信。ServiceM原创 2020-12-08 22:24:11 · 820 阅读 · 0 评论 -
android Activity LaunchMode原理解析
1.launchMode介绍android:launchMode共有四种模式可与 Intent 对象中的 Activity 标记(FLAG_ACTIVITY_* 常量)协同工作,以确定在调用 Activity 处理 Intent 时应执行的操作。这些模式是:standardsingleTopsingleTasksingleInstance默认模式是“standard”。这些模式可分为两大类:standard和singleTop 为一类,可多次进行实例化使用standard或sin原创 2020-12-06 12:21:53 · 752 阅读 · 0 评论 -
Java多线程在android中的使用_FgThread
FgThread类的作用是为系统提供一个运行在前台的共享单例线程,用来执行通用的前台service操作,不会阻塞任何东西1.FgThread简介类定义如下:public final class FgThread extends ServiceThread几个关键属性private static FgThread sInstance FgThread对象private static Handler sHandler handler对象,用来处理消息private static Handle原创 2020-11-25 23:29:07 · 847 阅读 · 0 评论 -
Java多线程在android中的使用_AsyncTask
AsyncTask是android提供的一个轻量级的异步任务,用来执行后台任务,并将结果发送到UI线程。注意:此类在api 30(Android 11)中AsyncTask被正式废弃被弃用后,Android给出了两个替代的建议:java.util.concurrent包下的相关类,如Executor,ThreadPoolExecutor,FutureTask。kotlin并发工具,那就是协程 - Coroutines了。1.AsyncTask类简介AsyncTask是一个抽象类,类的定原创 2020-11-25 23:03:32 · 348 阅读 · 0 评论 -
android RoleManagerService
之前在项目过程中,遇到P版本升级到Q版本,有2个默认应用发生变化的问题,浏览器和语音助手,都变成Google的应用,记录一下分析的过程1.RoleManagert和RoleManagerService相关的介绍RoleManager就android Q版本新增加的特性,主要用来管理默认应用设置的,目前支持的Role有8种public static final String ROLE_ASSISTANT = "android.app.role.ASSISTANT";public static fina原创 2020-11-11 22:04:50 · 5332 阅读 · 0 评论 -
android Handler消息机制实现原理
网上关于Handler实现机制的介绍很多,本文主要写自己关于Handler的一些理解1.一些常见疑问解答Q1:简述Handler消息机制的实现原理A1:Handler对象在创建的时候,会有一个Looper初始化,初始化的同时会创建一个MessageQueue对象,并启动消息循环,当调用sendMessage方法的时候,会调用到MessageQueue的enqueueMessage方法将消息插入消息队列,在此方法里面,会调用nativeWake来唤醒Looper,取出队头消息,然后通过target.di原创 2020-11-07 00:31:56 · 500 阅读 · 0 评论 -
android Touch事件传递机制
1.基础知识简介在分析Touch事件传递之前,先了解一下android系统关于输入设备和输入事件的定义InputEvent 输入事件的抽象,支持2种类型MOTION_EVENT和KEY_EVENTInputDevice 输入设备的抽象,支持类型有鼠标、键盘、触摸屏等InputEvent 输入事件的公共类,内部定义了2个INPUT类型,MOTION_EVENT和KEY_EVENT,以及事件对应的InputDevice,通过getSource方法来获取 /** @hide */ p原创 2020-11-06 00:33:40 · 362 阅读 · 0 评论 -
LLVM clang flex bison
最近在研究android recovery实现原理的时候,脚本语言edify的解析原理updater-script不是很清楚,只知道大概的意思,定义一些规则,支持的方法以及属性,但是无法将具体的实现串连起来。通过在网上查阅资料,发现是通过现有的flex bison框架来实现,记录一下。官方文档关于edify的一些主要特性说明整个脚本文件文件是单个表达式所有表达式是字符串字符串文字用双引号引起来。 \ n,\ t,\“和\,以及\ , x4a之类的十六进制转义字符都可以支持。仅由字母,原创 2020-11-05 22:43:51 · 733 阅读 · 2 评论 -
android window和activity一些理解
前面Activity体系和Window体系,分别以Activity为中心和分别以Window为中心来展示应用界面显示及切换的相关流程原创 2020-10-16 01:30:47 · 980 阅读 · 0 评论 -
android关于setContentView方法的一些理解
一般在实现自己的Activity的时候,会在onCreate方法里面调用setContentView方法,来设置我们需要的布局,下面我们来分析一下此方法的整个调用流程1.Activity.setContentViewsetContentView在Activity里面定义如下: public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID);原创 2020-10-15 23:48:41 · 969 阅读 · 0 评论 -
android window体系_2.window窗口管理
在前面的WMS相关的类图里面,对window体系涉及到的相关类及其主要功能有个大概了解原创 2020-10-14 23:07:39 · 480 阅读 · 0 评论 -
android window体系_1.WMS相关的类图
window体系以WindowManagerService为中心原创 2020-10-13 21:54:00 · 593 阅读 · 0 评论 -
android里面的Activity体系结构(4)_View创建及显示流程
先看一下Activity界面的整体结构其中有几个很关键的类PhoneWindow继承自Window类,代表andorid特有的window,window的实现类作为顶层View添加到windowmanager里面,Activity类里面的setContentView方法调用的PhoneWindow的setContentView来/** 1. Abstract base class for a top-level window look and behavior policy. An 2原创 2020-09-23 22:49:32 · 423 阅读 · 0 评论 -
android里面的Activity体系结构(2)_Activity lifecycle实现原理说明
1.简介ClientLifecycleManager是管理Activity lifecycle的,在ActivityTaskManagerService里面提供getLifecycleManager来获取此对象,其中mLifecycleManager是在ActivityTaskManagerService的构造方法里面初始化的本文基于Android 10的源代码来分析说明 ClientLifecycleManager getLifecycleManager() { return原创 2020-09-22 22:39:13 · 924 阅读 · 0 评论 -
android里面的Activity体系结构(3)_ActivityRecord和Activity状态变化分析说明
ActivityRecord是运行在system_server进程里面的,Activity是运行在应用进程里面的,虽然内部有个变量ActivityInfo info来代表Activity的所有信息,但是状态的变化不是和Activity完全一致,Activity的状态变化是由ActivityRecord状态变化来影响并改变的1.ActivityRecord 状态在ActivityRecord里面有个内部变化ActivityState mState,每次状态有变化的时候,都会调用setState方法来设置,原创 2020-09-20 00:29:47 · 1779 阅读 · 0 评论 -
android里面的Activity体系结构(1)_ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord
本文主要从3个方面来介绍这几个类之间的关系,先从整体关系图,对4个类的关系有个大概的了解,然后通过dumpsys命令,来验证这种关系;然后从类定义的角度来看,4个类是如何互相包含的;最后从Activity启动的流程过程来看4个类是如何关联上来的。通过阅读本文,能对ActivityDisplay/ActivityStack/TaskRecord/ActivityRecord的关系有个整体的认识和理解1.整体关系图如下通过adb shell dumpsys activity activities 命令可原创 2020-09-19 14:45:26 · 1855 阅读 · 0 评论 -
关于createPackageContext方法的一些理解
最近在项目过程中遇到这个一个问题:在ActivityManagerService里面的getContentProvider出现SecurityException异常,callingPackage和uid不一致 public final ContentProviderHolder getContentProvider( IApplicationThread caller, String callingPackage, String name, int userId,原创 2020-09-07 21:35:21 · 2847 阅读 · 0 评论 -
android Q版本START_ACTIVITIES_FROM_BACKGROUND
最近项目中遇到一个问题:一个客户应用从后台启动Activity,有如下打印Slog.w(TAG, "Background activity start [callingPackage: " + callingPackage + "; callingUid: " + callingUid + "; isCallingUidForeground: " + isCallingUidForeground + "; is原创 2020-08-13 22:28:57 · 4357 阅读 · 0 评论 -
android SettingsPanelTest fail问题分析
最近在项目过程,如下fail项nfcPanel_correctPackagenfcPanel_doneClosesPanel记录一下解决思路和过程,首先是配置CTS环境,这个是基础,wwindow/linux 都可以配置,大部分测试都可以在自己的电脑进行,当然有些需要特殊网络环境。配置环境很重要,解决CTS问题也是一个debug的过程,电脑上没有验证环境,很影响解决问题的效率。对于CTS问题,电脑上能复现,基本上就解决了一大半,对于一个必现的问题,后面只是时间问题1.CTS环境配置CTS环境准原创 2020-08-13 22:28:14 · 387 阅读 · 0 评论 -
android odex文件权限定制
在做Felica FN认证的时候,遇到一个奇怪的需求:要求生成的odex文件权限是640刚开始拿到这个问题的时候,还以为是在编译CI里有哪个地方可以配置,查了一下编译相当的mk文件,没有找到,然后查PMS和isntalld里面的相关逻辑,只有dex2ota相关的,具体的文件权限定义没有找到后面通过Google,找到了相关的说明,关于文件权限的定制及控制,android官方给的说明如下:https://source.android.google.cn/devices/tech/config/filesy原创 2020-08-02 13:05:43 · 482 阅读 · 0 评论 -
OTA升级后应用未更新问题分析
在SD卡版本和ota升级到Q版本的版本差异的时候,发现一个奇怪的问题:有一个在data/app目录下的apk(com.application.xxxSub),SD卡版本的版本号比OTA升级上来之后的版本号要高版本之间的差异对比工具可参考:https://github.com/chadmXiang/CompareVersionDiff/tree/master/tool/start_getdiff.bat整个分析过程主要解决2个问题:apk从哪里来apk为什么版本号不一致1.apk从哪里来原创 2020-08-02 13:04:29 · 1913 阅读 · 0 评论 -
手机比较版本差异工具
CompareVersionDiff导出每个手机版本的里面apk、property、xml配置,然后对比2个不同的版本之间的差异,来确认是否有非预期的修改被带入背景:手机项目开发进入后期,相关的修改及对应的测试重点是针对修改点,在多个团队共性开发的情况下,每个模块的修改点ReleaseNote不一定都能准确提供,都过对比apk/property/xml,可以过滤一些非预期的修改说明:此方法能拦截一部分比较明显的问题,缩小差异范围,为评估版本的修改影响和测试策略的制定提供帮助使用说明配置要求:原创 2020-06-06 15:03:16 · 690 阅读 · 0 评论 -
NotificationManager 通知声音控制逻辑
主要分析Notification通知声音流程一般使用Notification用法如下:// 创建一个NotificationManager的引用 NotificationManager notificationManager = (NotificationManager) this.getSystemService(android.content.Context...原创 2018-08-06 23:00:26 · 4024 阅读 · 0 评论 -
android 实用工具类
1.通过反射获取系统属性 /** * Get the value for the given key. * * @return an empty string if the key isn't found */ public static String getSystemProperties(Context context, String k...原创 2018-08-06 22:51:13 · 191 阅读 · 0 评论 -
android 屏保 (PowerManager & DreamService)
一、应用中使用DreamService1.DreamService简介 白日梦是Android设备的新型互动屏保模式。当设备置入底座或充电闲置状态时(屏幕没有关闭),此模式自动激活。白日梦模式每次显示一个,可以是纯粹的视觉效果,在用户触摸时消失,也可以是响应用户所有输入的交互式应用。您的白日梦将运行在您应用的进程内,并可以访问所有的AndroidUI工具包,可以使用视图、布局和动画等。所以...原创 2018-08-06 22:47:46 · 14716 阅读 · 6 评论 -
Android Log.isLoggable
Log.isLoggableAPI中关于此方法的说明: Checks to see whether or not a log for the specified tag is loggable at the specified level. The default level of any tag is set to INFO. This means that any level ab...原创 2018-08-06 22:35:31 · 380 阅读 · 0 评论 -
Mstar 光机遥控器适配
以XXXX光机上,以上下左右4个键为例: 1.创建头文件在kernel/mstart/mstar/ir/目录下面新建一个IR_LEADER.h,直接复制IR_MSTAR_DTV.h里面的内容 a. 修改头码 其中头码是指的客户码807Fb.修改key codeIRKEY_UP = 0x52IRKEY_DOWN ...原创 2018-08-04 22:56:50 · 1005 阅读 · 0 评论 -
Android.mk 快速入门
本文主要介绍Android.mk一些基础概念及用法,在文章的开头,会介绍一些Makefile相关的内容,打一些基础,在阅读过程中,可以根据自己的需求,跳过Makefile相关的,直接阅读Android.mk里面的语法及相关的用法;如果想要深入了解Android.mk里面的东西,建议还是了解一些Makefile相关的东西通过阅读本文,可以了解Android.mk里面的一些基础语法,以及怎么编译a...原创 2018-08-04 22:35:56 · 236 阅读 · 0 评论