
Android上层
文章平均质量分 62
主要以上层应用开发为主
雪舞飞影
喜欢钻研Android源码的程序猿
展开
-
Android跨进程通信(三)——系统服务
本篇文章介绍如何在Framework添加一个系统服务,来完成同Client的跨进程通信。原创 2023-03-20 19:42:15 · 1208 阅读 · 0 评论 -
Android跨进程通信(二)——应用服务(2)
本篇文章介绍如何通过App添加一个系统服务,服务端的App通过Android.mk编译进系统,来完成同Client端的跨进程通信。原创 2023-03-20 19:37:19 · 1639 阅读 · 1 评论 -
Android跨进程通信(二)——应用服务(1)
本篇文章介绍如何通过App添加一个系统服务,服务端的App作为正常应用使用,来完成同Client的跨进程通信。原创 2023-03-16 20:58:03 · 1276 阅读 · 0 评论 -
Android跨进程通信(一)——RemoteCallbackList的使用
在做FW时,经常用到RemoteCallbackList,是线程与线程之间交流的的重要工具,他的主要作用就是把多个callback保存到列表里,在合适的时机同时回调,也可以防止重复的调用相同的任务,只保证你需要的一个结果回调。原创 2023-03-16 20:51:54 · 1726 阅读 · 0 评论 -
Android手势GestureDetector分析(二)——源码
通过不同的MotionEvent类型来触发不同的回调函数操作。原创 2023-01-16 16:01:23 · 1198 阅读 · 0 评论 -
Android事件拦截(一)——触摸事件MotionEvent分析
MotionEvent相关动作分析原创 2023-01-09 14:02:17 · 1519 阅读 · 0 评论 -
Android的Monkey测试
Monkey测试用法原创 2022-06-28 10:24:34 · 1430 阅读 · 0 评论 -
dp与px转换关系
如果想了解完整的屏幕尺寸问题,可以阅读如下文章Android屏幕尺寸详解。现在主要说的是dp和px的转换。dp = (pixels * 160) / screen density在Android中,规定以160dpi(即屏幕分辨率为320×480)为基准:1dp=1px密度类型代表的分辨率(px)屏幕密度(dpi)换算(px/dp)比例低密度(ldpi)240×3201201dp=0.75px3中密度(mdpi)320×4801601dp=1px4原创 2022-05-17 16:16:54 · 3282 阅读 · 0 评论 -
Android S内置APK时AndroidManifest使用uses-library编译报错
(1)安装或编译出现的错误Google关于这方面在Android S的改动有文档输出,可以参考如下:Dexpreopt 和 uses-library 检查。此项报错主要是构建系统在Android.bp或Android.mk文件中的信息与Manifest清单之间进行构建时一致性检查,要求声明请求使用的libraries跟AndroidManifest.xml中声明的一致,否则将报错。接下来查看编译报错:error: mismatch in the <uses-library> tags b原创 2022-03-22 17:29:10 · 8014 阅读 · 0 评论 -
系统开发中常用命令
1、dumpsys命令(1)adb shell dumpsys(2)adb shell service listadb shell dumpsys media.camera -v 2 > meta.txtadb shell dumpsys meminfo > mem.txtadb shell dumpsys SurfaceFlinger > sf.txt2、getprop获取属性adb shell getprop > prop.txtadb shellgetprop原创 2021-08-13 22:05:36 · 521 阅读 · 0 评论 -
Android中的config_reverseDefaultRotation属性
(1)系统全局修改//frameworks/base/core/res/res/values/config.xml<!-- If true, the direction rotation is applied to get to an application's requested orientation is reversed. Normally, the model is that landscape is clockwise from portrait;原创 2021-08-13 22:03:22 · 688 阅读 · 0 评论 -
ContentProvider和ContentResolver演示
(1)概述这里来模拟应用是如何访问ContentProvider,所以此处的ContentProvider也是自定义的,后通过ContentResolver来访问,具体源码可访问如下:ContentProviderContentResolver(2)部分源码(A)ContentProvider<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/a原创 2021-12-22 16:53:14 · 1397 阅读 · 0 评论 -
Android中MediaStore的介绍
(1)简介MediaStore是android系统提供的一个多媒体数据库,专门用于存放多媒体信息的,通过ContentResolver即可对数据库进行操作。MediaStore.Files: 共享的文件,包括多媒体和非多媒体信息;MediaStore.Audio: 存放音频信息;MediaStore.Image: 存放图片信息;MediaStore.Vedio: 存放视频信息;每个内部类中都又包含了Media,Thumbnails和相应的MediaColumns,分别提供了媒体信息,缩略信息原创 2021-12-22 15:31:22 · 9262 阅读 · 1 评论 -
Android系统之registerContentObserver(一)
(1)APIContentObserver——内容观察者,目的是观察特定Uri引起的数据库的数据变化,继而做一些相应的处理,它类似于数据库技术中的触发器(Trigger),当ContentObserver所观察的Uri数据发生变化时,便会触发它。(A)ContentResolver类:注册/取消注册ContentObserver方法/*为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。uri—— 需要观察的Uri(需要在UriMat原创 2021-12-17 14:05:29 · 10635 阅读 · 1 评论 -
Android系统之SettingsProvider(二)
(1)概述(A)SettingsProvider顾名思义是一个提供设置数据共享的Provider,SettingsProvider和Android系统其它Provider有很多不一样的地方,如:SettingsProvider只接受int、float、string等基本类型的数据;SettingsProvider由Android系统framework进行了封装,使用更加快捷方便;SettingsProvider的数据由键值对组成;(B)SettingsProvider有点类似Android原创 2021-09-29 16:41:44 · 4273 阅读 · 0 评论 -
Android系统之ContentObserver和SettingsProvider结合使用(三)
通过前两篇的文章:Android系统之registerContentObserver(一)Android系统之SettingsProvider(二)我们了解了如何通过registerContentObserver来注册监听器,以及Android系统的SettingsProvider如何进行使用。接下来我们简单看一个二者共同使用的例子,可跨进程使用(Java进程)。//注册mContext.getContentResolver().registerContentObserver(Settings.原创 2021-12-17 14:30:45 · 1912 阅读 · 0 评论 -
重力传感器(一)——监听数据
(1)前景介绍在使用Android传感器之前,我们首先要弄清楚当前Android设备支持哪些传感器,只有这样我们才能继续操作。而一般手机不会集成所有的传感器, 大部分只支持一部分传感器:方向传感器、重力传感器等。传感器大致可分为三类:动作(Motion)传感器环境(Environmental)传感器位置(Position)传感器(A)动作传感器:这类传感器在三个轴(X、Y、Z)上测量加速度和旋转角度。加速(accelerometer)传感器陀螺仪(gyroscope)传感器重力(g原创 2021-09-11 14:35:52 · 2307 阅读 · 0 评论 -
重力传感器(二)——屏幕旋转OrientationEventListener监听
(1)OrientationEventListener源码//frameworks/base/core/java/android/view/OrientationEventListener.java/** * Helper class for receiving notifications from the SensorManager when * the orientation of the device has changed. */public abstract class Orient原创 2021-09-04 01:28:16 · 1907 阅读 · 0 评论 -
SurfaceView,TextureView,SurfaceTexture相关
首先我们知道View类如果需要更新视图,必须我们主动的去调用invalidate()或者postInvalidate()方法来再走一次onDraw()完成更新。但是呢,Android系统规定屏幕的刷新间隔为16ms,如果这个View在16ms内更新完毕了,就不会卡顿,但是如果逻辑操作太多,16ms内没有更新完毕,剩下的操作就会丢到下一个16ms里去完成,这样就会造成UI线程的阻塞,造成View的运动过程掉帧,自然就会卡顿了。所以这些原因也就促使了SurfaceView的存在。比如一个Camera,它有可能原创 2021-09-14 18:54:04 · 2206 阅读 · 0 评论 -
Android 存储权限适配指南
Android权限大致可分为三类:普通权限:只需要在清单文件中注册即可危险权限:需要在代码中动态申请,以弹系统 Dialog 的形式进行请求特殊权限:需要在代码中动态申请,以跳系统 Activity 的形式进行请求而我们今天要讲的主题,是关于存储权限,在 Android 6.0 之后就变成了危险权限,而到了 Android 11 上面变成了特殊权限,而最明显的区别是一个是通过 Dialog 展示给用户看,另外一个是通过 Activity 展现给用户看。6.0之后的危险权限Android原创 2021-04-05 22:28:27 · 11816 阅读 · 6 评论 -
Java/Android多线程/进程通信
(1)多线程通信(1)Android层面(1)runOnUiThreadrunOnUiThread(new Runnable() { @Override public void run() { //更新UI }});(2)View.post和View.postDelayedView默认带一个Handler属于mainLooper的,View.post相当于这原创 2017-12-27 17:30:17 · 425 阅读 · 0 评论 -
Android中Application类的理解
首先,Application在一个Dalvik虚拟机里面只会存在一个实例,所以你不需要去弄什么单例模式来静态获取Application了,你把Application构造函数设置成private都不可能实现!那么为什么强调说是一个Dalvik虚拟机,而不是说一个App呢?因为一个App有可能有多个Dalvik虚拟机,也就是传说中的多进程模式。在这种模式下,每一个Dalvik都会存在一个Appli...原创 2018-11-09 17:10:10 · 529 阅读 · 0 评论 -
Android中两种序列化方式的比较Serializable和Parcelable
Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用这两种序列化方式。还有,我们需要对象持久化到存储设备或者通过网络传输给其他客户端,这个使用也需要使用Serializale来完成对象的序列化。Serializable接口public class User1 implements Serializable{ ...原创 2018-11-15 19:33:47 · 352 阅读 · 0 评论 -
Android中隐式Intent的匹配规则
Android中系统组件的启动方式有显式启动和隐式启动,我们今天主要就了解一下隐式启动中的匹配规则。Intent Filter匹配规则只有action、category、data三方都匹配,Intent才算是匹配成功,进而才能打开相应的Component。一个Component若声明了多个Intent Filter,只需要匹配任意一个即可启动该组件。 &amp;amp;amp;lt;activity a...原创 2018-11-15 10:41:54 · 2463 阅读 · 0 评论 -
Android手势GestureDetector分析(一)——应用
当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(View v, MotionEvent event)方法,我们可以处理一些touch事件,但是这个方法太过简单,如果需要处理一些复杂的手势,Android SDK给我们提供了GestureDetector(Ge...原创 2019-05-13 19:16:38 · 868 阅读 · 2 评论 -
Android ANR产生的原因和分析
ANR的全称是application not responding,意思就是程序未响应,类似于我们在windows上见到的程序未响应。ANR发生会使用户觉得我们的程序不友好,那么什么情况会导致ANR的发生呢?首先ANR的发生是有条件限制的,分为以下三点:1.只有主线程才会产生ANR,主线程就是UI线程;2.必须发生某些输入事件或特定操作,比如按键或触屏等输入事件,在BroadcastReceiver原创 2017-12-07 17:20:07 · 862 阅读 · 0 评论 -
Android中Home键的监听和拦截
首先大家应该先了解一种情况,就是Android在应用中是无法拦截Home键的,今天我们带大家看一下Home键的三种情况。1、在应用中按下Home键的逻辑处理当我们在应用中按下Home键时界面会启动到桌面,我们在frameworks\base\policy\src\com\android\internal\policy\impl\PhoneWindowManager.java类中可以看到其实现原理,其原创 2017-02-13 17:31:12 · 14935 阅读 · 2 评论 -
Android屏幕尺寸详解
1、重要概念随着Android厂商对系统的不断定制,Android出现越来越多不同尺寸的手机,由于尺寸和分辨率等不同,从而导致Android的适配成为一个老大难的问题,今天我们就来聊聊Android中的屏幕尺寸。我们先了解一下几个重要的概念:什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?什么是dp、dip、dpi、sp、px?什么是ldpi、mdpi、hdpi、xdpi、xxdpi?(1)什么是屏幕尺寸、屏幕分辨率、屏幕像素密度?(A)屏幕尺寸屏幕尺寸指屏幕的对角线的长度,单位是英寸,1英寸原创 2017-06-20 14:42:09 · 20853 阅读 · 0 评论 -
Activity的启动模式详解
1、概念在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance可以根据实际的需求为Activity设置对应的启动模式,从而可原创 2017-07-05 17:49:56 · 360 阅读 · 0 评论 -
Uri结构解析(Android)
URI(uniform resource identifier):统一资源标识符 URL(uniform resource locator):统一资源定位符 URN(uniform resource name):统一资源命名接下来看一下URI的结构:[scheme:][//authority][path][?query][#fragment] [scheme:][//host:port][pa原创 2017-10-13 09:57:04 · 1713 阅读 · 0 评论 -
Android 系统版本和 API 等级对应关系表
Platform Version API Level VERSION_CODE 中文名称Android 8.0 26 OreoAndroid 7.1.1/7.1 25 NougatAndroid 7.0 24 Nougat原创 2017-10-16 10:29:57 · 641 阅读 · 1 评论 -
Android中asset文件夹和raw文件夹区别
1、异同点(1)res/raw和assets的相同点: 两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。(2)res/raw和assets的不同点: 1、res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.raw.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类。2、res/原创 2017-10-16 14:18:59 · 893 阅读 · 0 评论 -
Drawable、Bitmap、Canvas、Paint和 Matrix 的使用(一)
今天我们所说的是底层图形类android.graphics。1、概念Bitmap:称作位图,一般位图的文件格式后缀为bmp,当然编码器也有很多如RGB565、RGB888、ARGB8888。作为一种像素的显示对象执行效率高,但是存储效率低的缺点也很明显。就理解为一种bmp格式图像存储对象。Drawable:作为Android下通用的绘制图形对象,它可以装载常用格式的图像,比如GIF原创 2017-10-16 16:44:49 · 467 阅读 · 0 评论 -
Drawable、Bitmap、Canvas、Paint和 Matrix 的使用(二)
Matrix的set,pre,post调用顺序Matrix主要用于对平面进行缩放,平移,旋转以及倾斜操作,为简化矩阵变换,Android封装了一系列方法来进行矩阵变换。 pre系列方法:preScale,preTranslate,preRotate,preSkew; set系列方法:setScale,setTranslate,setRotate,setSkew; post系列方法:pos原创 2017-10-16 17:39:05 · 397 阅读 · 0 评论 -
Drawable、Bitmap、Canvas、Paint和 Matrix 的使用(三)
在Android中的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法,Canvas代表了“依附”于指定View的画布,它提供了如下方法绘制各种图形。Canvas还提供了如下方法进行变换:在Canvas提供的绘制方法中用到了一个API:Paint,Paint 代表了Canvas上的画笔,主要用于绘制风格,包括画笔颜色、画笔笔触粗细、填充风格等。它提供了如下方法。在Ca原创 2017-10-25 16:52:15 · 470 阅读 · 0 评论 -
PreferenceFragment详解
在上篇文章中我们讲述的是Android 5.1 Settings的源码解析http://blog.youkuaiyun.com/dongxianfei/article/details/51979922,其中在介绍到Android的Sub Setting时,我们说到基本上都是使用的PreferenceFragment技术,今天我们就来了解一下关于PreferenceFragment相关的技术吧。原创 2016-07-26 11:08:23 · 9154 阅读 · 3 评论