android基本知识
文章平均质量分 94
好人静
这个作者很懒,什么都没留下…
展开
-
小白自我提高学习设计模式笔记(五)—模板模式
前言结合着Android源码把所有的设计模式总结一下。小白自我提高学习设计模式笔记(一)—代理模式小白自我提高学习设计模式笔记(二)—装饰者模式小白自我提高学习设计模式笔记(三)—装饰者模式在Android开发的小试小白自我提高学习设计模式笔记(四)—责任链模式小白自我提高学习设计模式笔记(五)—模板模式 在小白自我提高学习设计模式笔记(四)—责任链模式一...原创 2021-09-09 11:55:47 · 254 阅读 · 0 评论 -
小白自我提高学习设计模式笔记(四)—责任链模式
前言结合着Android源码把所有的设计模式总结一下。小白自我提高学习设计模式笔记(一)—代理模式小白自我提高学习设计模式笔记(二)—装饰者模式小白自我提高学习设计模式笔记(三)—装饰者模式在Android开发的小试小白自我提高学习设计模式笔记(四)—责任链模式一 责任链模式...原创 2021-09-08 16:12:56 · 267 阅读 · 0 评论 -
Android Q R的适配(二)-隐私权限
Execution failed for task ':app:processHuaweiDebugMainManifest'.> Manifest merger failed : Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an inte...原创 2021-09-02 14:52:17 · 2651 阅读 · 1 评论 -
AndroidQ R的适配(一)-分区存储的适配
一 分区存储的适配Android的文件系统分为内部存储(Internal Storage)和外部存储(External Storage)。1.内部存储(1)概念 该存储区域主要存储的是数据库、SharedPreferences等系统数据。主要有三种类型的文件内容:(1)system/:存放的系统数据 (2)data/:存放应用相关的数据 ,该区域的数据在应用卸载时里面的文件会全部删除。 (3)vendor/:用于存放厂商定制化的数...原创 2021-08-27 17:16:55 · 1351 阅读 · 0 评论 -
小白自我提高学习设计模式笔记(三)—装饰者模式在Android开发的小试
装饰者模式项目中的应用在一个Android应用开发中,在Application中可以通过调用registerActivityLifecycleCallbacks()来实现对Activity的生命周期进行监听,那么有的时候需要监听Activity的生命周期来实现下面几个功能:(1)通过监听Activity的生命周期来统计应用中打开的未被finish()的Activity,在应用完全退出的时候,将未被关闭的Activity执行finish(),防止在应用退出的时候黑屏显示;(2)通过监听Activi原创 2021-08-18 16:36:07 · 1657 阅读 · 0 评论 -
小白自我提高学习设计模式笔记(二)—装饰者模式
一 装饰者模式1.定义动态给对象添加一些额外的属性或行为。而继承会产生大量的子类。Java提供的对象不能满足现有的功能,装饰者模式就是对原有对象增强。通常有四部分组成:Component:一个抽象类或一个接口。装饰者和被装饰者共同的父类,用来定义基本行为Concrete Component:定义具体对象。即被装饰类。Decorator(装饰类):是Component子类,是一个抽象类或者接口。是具体装饰类共同实现的抽象类(也可以是接口),并且持有一个Component类的对象引用原创 2021-05-25 13:59:42 · 145 阅读 · 1 评论 -
Android 跨进程通信-(十一)Binder机制之ServiceManager对系统Service的管理
前言在Android 跨进程通信-(二)Binder机制之ServiceManager主要是总结了ServiceManager进程是怎么和Binder驱动进行通信的。我们知道ServiceManager是用来管理系统Service的,那么到底是怎么完成系统Service的注册和查询呢?...原创 2021-05-18 15:13:54 · 1646 阅读 · 1 评论 -
Android 跨进程通信-(十)Binder机制传输数据限制—罪魁祸首Binder线程池
前言在Android 跨进程通信-(三)Binder机制之Client中提到2.APP进程初始化在通过ProcessState来获取驱动设备文件"/dev/binder/"文件描述符,并且在用户和内核的虚拟空间的时候,会开辟1M-8K的内存空间,用于当前进程与Binder驱动进行传递数据,但是在实际传输过程中,其实并不能达到这么大的数据。这次主要是详细总结下这个原因...原创 2021-05-13 15:58:28 · 4260 阅读 · 2 评论 -
Android 跨进程通信-(九)从源码分析AIDL跨进程通信实现
前言在Android 跨进程通信-(八)AIDL中的代理模式之源码分析中其实主要还是在总结AIDL中的代理模式的体现,也提到了Client和Server之所以能够进行交互数据,最主要的原因就是依赖Binder驱动,这次就是从Client和Server传递数据的过程在总结下流程,并且就是一一解决之前遇到的一些问题。简单的拿应用层的AIDL服务来看下这个源码的调用过程,大体分为:1.bindService()将Client和Server建立关系 2.Server通过onBind()将Stub返回.原创 2021-05-11 17:12:45 · 523 阅读 · 9 评论 -
Android 跨进程通信-(八)AIDL中的代理模式之源码分析
二 bindService前面在Android 跨进程通信-(四)Binder机制之Server也提到了一 几个常见的类1.IBinder接口类,表示一种跨进程通信的能力。public interface IBinder {}2.BinderFramework对Binder驱动封装的Java类。public class Binder implements IBinder { final class BinderProxy implements IBinder .原创 2021-05-08 17:27:31 · 1598 阅读 · 8 评论 -
Android 跨进程通信-(七)AIDL中的代理模式之创建AIDL实例
前言前面的一系列的Android 跨进程通信-(一)Binder概念引入Android 跨进程通信-(二)Binder机制之ServiceManagerAndroid 跨进程通信-(三)Binder机制之ClientAndroid 跨进程通信-(四)Binder机制之ServerAndroid 跨进程通信-(五)Binder机制之一次拷贝的原理Android 跨进程通信-(六)几句话描述Binder机制都是从源码的角度来了解了Binder机制的一些概念性的东西,Binder驱原创 2021-04-28 16:07:46 · 731 阅读 · 0 评论 -
Android 跨进程通信-(六)几句话描述Binder机制
前言Android 跨进程通信-(一)Binder概念引入Android 跨进程通信-(二)Binder机制之ServiceManagerAndroid 跨进程通信-(三)Binder机制之ClientAndroid 跨进程通信-(四)Binder机制之ServerAndroid 跨进程通信-(五)Binder机制之一次拷贝的原理经过前面五篇文章的总结,对Binder机制有了自己的一点认知,如果在面试中让我对Binder机制说一点内容,我会怎么去介绍呢?1.什么是Binder原创 2021-04-27 15:05:21 · 481 阅读 · 0 评论 -
Android 跨进程通信-(五)Binder机制之一次拷贝的原理
三 APP三 Server进程前面主要从源码的角度看了下APP进程是怎么创建出来的,那么Server进程又是如何创建的呢?在创建过程中是不是也会存在同样的逻辑呢?4.binder_ioctl()通过维护着很多switch的case匹配来处理对应着进程发过来的请求。通过一个Native发送过来的一个BINDER_WRITE_READ指令来看下一个简单的流程:(1)在ServiceManager进程中调用到framework/native/cmds/servicemanag...原创 2021-04-26 16:48:57 · 1185 阅读 · 1 评论 -
Android 跨进程通信-(一)Binder概念引入
前言主要对Android中的跨进程通信进行总结下,这篇先梳理下里面的涉及的一些概念一 多进程1.进程与线程进程:系统中正在运行的一个应用程序,某个程序一旦运行就是一个进程,是资源分配的最小单位; 线程:程序执行的最小单位,包含在进程中,一个进程可以包含多个线程。2.Android应用中的多进程(1)dalivk虚拟机Android系统的底层任务管理以及驱动都是基于Linux系统。一个Android系统其实就是一个Linux系统,通过adb shell进入连接的手机,就可以看到Li原创 2021-04-26 14:48:17 · 861 阅读 · 4 评论 -
Android 跨进程通信-(四)Binder机制之Server
前言在Android 跨进程通信-(二)Binder机制之ServiceManager和Android 跨进程通信-(三)Binder机制之Client已经总结了Binder机制中的ServiceManager和Client进程的创建过程,那么Server的进程是如何创建出来的呢?本次基于上次假设的一个APP去访问一个AIDL服务来进行分析,那么就看一个AIDL服务进程是怎么创建的呢?...原创 2021-04-22 16:13:59 · 675 阅读 · 1 评论 -
Android 跨进程通信-(三)Binder机制之Client
前言通过源码的角度来看下到底Binder机制是一个什么东西。如果不喜欢看源码,可以直接看每个章节的小结。一 ServiceManager在前面一篇Android 跨进程通信-(一)Binder概念引入中也总结过:Android在系统启动的时候,用户空间启动的第一个进程是init进程,在init进程中会启动Zygote进程,在Zygote进程会fork出SystemServer进程,也就是执行SystemServer的main函数,该文件位于framework/base/services/java原创 2021-04-20 17:59:24 · 1093 阅读 · 0 评论 -
Android 跨进程通信-(二)Binder机制之ServiceManager
前言在前面一篇Android 跨进程通信-(一)Binder概念引入中也总结过:Android在系统启动的时候,用户空间启动的第一个进程是init进程,在init进程中会启动Zygote进程,在Zygote进程会fork出SystemServer进程,也就是执行SystemServer的main函数,该文件位于framework/base/services/java/com/android/server目录下,其中main()里面的主要代码如下:public final class SystemS原创 2021-04-16 15:08:49 · 988 阅读 · 1 评论 -
Android项目的MVC与MVP
做了Android开发很长时间了,从毕业就一直从事Android开发。现在在翻看自己以前项目中的代码,发现自己以前想法写到代码不是一般的烂。最近也在做一些技术沉淀,发现需要学习的东西还有好多,每天觉得时间飞快。最近也是将公司项目架构调整了一下。以前项目也就是简单的MVC架构模式,当公司业务越来越复杂的时候,发现这种分层方式的弊端越来越明显,Activity中堆积了大量的代码,业务复杂的Activity,代码都有几千行。代码可读性极差,后期维护性差,想想如果哪天产品要对页面UI进行升级的话,其实改造成本还蛮高原创 2021-01-29 14:58:41 · 475 阅读 · 0 评论 -
Android动画的初次认知
一Android 动画分类Android动画有三种:一种是传统动画,一种是属性动画(Property Animation),而传统动画又包括帧动画(Frame Animation)和补间动画(Tweened Animation)。帧动画是最简单的一种动画,就是对图片资源的连续播放,更多依赖的是图片资源,并且原生的AnimationDrawable,这个动画有个缺点就是在加载该动画的时候,会把所有的图片资源都加载到内存中,会占用内存。通常在项目中如果该帧动画的图片资源很多的时候,建议不要采用该动画..原创 2020-12-28 15:57:02 · 142 阅读 · 0 评论 -
Android代码获取资源文件和系统属性
一 获取资源文件1.通过资源文件名称获取资源Id前几天在自定义Toast的时候,为了能够使用系统原生Toast的UI,所以就想着怎么引用Toast的布局文件。通过查Toast的源码发现,其实Toast的布局文件为transient_notification。 public static Toast makeText(@NonNull Context context, @Nullable Looper looper, @NonNull CharSequence text原创 2020-12-02 16:49:49 · 801 阅读 · 0 评论 -
Android View属性设置优先级的一点总结
前面一篇博文,主要介绍的Android自定义View的几种方式,那么定义的这个控件,肯定有一些属性希望在布局文件中可以直接进行配置。像在使用Android的系统控件的时候,都是以android:开头的一些属性,可以在布局文件中简单的配置就去设置某些属性值,在Android源码中系统的values文件夹维护一个attrs.xml文件来定义了这些属性,例如经常使用的layout_width: <declare-styleable name="ViewGroup_Layout"> ...原创 2020-11-30 15:29:01 · 1990 阅读 · 0 评论 -
Android自定义View的四种方式
一 前言 在Android开发中有很多业务场景,原生的控件是无法满足应用,并且经常也会遇到一个UI在多处重复使用情况,那么就需要通过自定义View的方式来实现这些UI效果。作为一个Android开发工程师自定义View属于一个必备技能。 像前几天正好做了一个上传本地图片的网格UI,点击相机的icon就可以上传选择本地图片,选中图片之后就可以显示的界面上。本来可以使用Android原生GridView,但是这个控件由于嵌套到ScrollView中,所以导致滑动事件冲突,当然网上...原创 2020-12-01 14:59:05 · 7749 阅读 · 1 评论 -
Android View的生命周期函数总结
文章目录一 View生命周期几个重要的方法1.`onFinishInflate`2.`onVisibilityChanged`3.`onAttachedToWindow`4.`onMeasure`5.`onLayout`6.`onDraw`二 View生命周期1.该View从xml加载时,默认的状态为Visible:(1)加载完毕,显示出来:(2)状态从Visible变成InVisible:状态再由InVisible变成Visible:(3)状态从Visible变成Gone:状态再由Gone变成Visibl原创 2020-11-18 17:00:27 · 1001 阅读 · 1 评论 -
小小的Toast蕴含大道理(解决关闭通知时原生Toast不显示问题)
最近项目中出现一个问题,就是有的手机在关闭系统通知,结果项目中使用的原生Toast在有的手机上竟然不显示了,然后就去查系统源码,发现原来原生的Toast是基于NotificaitionManagerService实现的,难怪有些手机不显示。那些显示的手机厂商应该发现了这个问题,在系统修改了源码。特别记录下这个过程,并且附上可以解决这个问题的源码,供大家参考。...原创 2020-09-01 17:26:02 · 1340 阅读 · 0 评论 -
Android google Multidex分包 gradle 3.1.0 坑
项目在很早之前方法数就超过65535,就加了google的Multidex。在第一次加入的无非就是根据api文档中的一步一步的加入到项目中:基本方案1、配置APP的build.gradle在配置文件中增加: defaultConfig { // Enabling multidex support. multiDexEnabled true}afterEvalua...原创 2018-04-28 11:11:13 · 2174 阅读 · 4 评论 -
OkHttp之getResponseWithInterceptorChain(一)
目录前言拦截器的加入RealInterceptorChainRetryAndFollowUpInterceptor1)创建StreamAllocation2)其他几个步骤3)总结BridgeInterceptor前言前面介绍了OkHttp之Dispatcher,Dispatcher主要就是对异步请求进行分发和执行,那么对于OkHttp到底是怎么进行完...原创 2019-03-29 13:12:14 · 876 阅读 · 0 评论 -
Retrofit-OkHttpCall源码解读
OkHttp的同步和异步请求Retrofit在使用OkHttpCall进行网络请求的时候,里面其实就是封装了OkHttp来进行网络请求。在分析OkHttpCall之前,先看下OkHttp怎么来实现同步和异步请求。1)同步请求 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder...原创 2019-03-04 15:09:06 · 374 阅读 · 0 评论 -
OkHttp之Dispatcher
目录成员变量1)最大值2)空闲回调3)线程池4)三个队列同步请求异步请求总结异步请求的执行策略。在OkHttp中承担着对同步和异步请求的分发和回调。今天主要从源码的角度看下这个过程是怎么实现的。成员变量1)最大值//最多并发请求的个数 private int maxRequests = 64;//每个主机最大请求数private...原创 2019-03-05 16:14:03 · 1666 阅读 · 0 评论 -
Git中合并几次commit记录
在之前Git合并代码的几个场景提到的场景1中可以将某个分支的commit记录完全复制到另外一个分支上。其中只提到的简单的将一次修改的commit记录复制到另外一个分支上,但是我们在实际开发中很有可能是需要复制好几次的commit记录,那么如果一个一个commit记录复制显示很out,那么git rebase命令就来拯救这个out的操作。还是举个实际的例子来演示下该操作。通过git log 查看...原创 2019-02-15 13:38:17 · 5916 阅读 · 0 评论 -
Android SharedPreferences源码的一点点思考
目录前言1、SharedPreferences创建2、SharedPreferencesImpl实现(1)构造函数:实例化成员变量,读出xml文件的key/value(2)存放数据:通过Editor来将修改的内容暂时存放到mModified中(3)提交修改数据:commit()和apply()(4)apply()在子线程中写文件(5)取数据3、总结4、几点注...原创 2019-01-29 10:51:34 · 348 阅读 · 1 评论 -
Git合并代码的几个场景
我们在平时项目中经常会用到Git进行版本管理。在项目版本迭代的过程中需要通过Git命令进行代码合并,下面提供集合场景来说明下不同场景下如果使用Git命令来合并代码。场景1-git cherry-pickgit假设现在有两个分支:一个是 deving表示正在开发的分支;一个是 test 表示线上的最新分支 。现在deving正在开发A、B、C三个功能,现在需要将A功能先发一个版本出来。此时可...原创 2019-02-14 17:01:04 · 3525 阅读 · 2 评论 -
Android 的singleTask和singleInstance的一点思考
目录导语一、几个概念1、概念区分2、 android:taskAffinity二、详细描述下这四种启动模式三、singleTask简单分析1、实例2、验证singleTask的几个特点3、简单总结singleTask的特点四、singleInstance的简单分析1、验证singleInstance的几个特点2、简单总结singleInstance的...原创 2019-01-16 15:12:49 · 12865 阅读 · 1 评论 -
OkHttp的Okio在CacheInterceptor中的应用
目录Okio的诞生OKio的简单介绍缓存模块超时机制几个重要的类简单的读写操作一个简单的java+socket来实现请求服务器在CacheInterceptor的运用1)写请求的头部header2)写请求体body的数据3)向服务器发送数据4)接收服务器的返回的头部header5)读取服务器返回的response的body数据总结Okio...原创 2019-03-29 11:34:18 · 252 阅读 · 0 评论 -
OkHttp之getResponseWithInterceptorChain(二)
接上篇OkHttp之getResponseWithInterceptorChain(一)继续目录CacheInterceptor构造方法CacheCacheStrategyCacheInterceptor的具体逻辑总结ConnectInterceptorStreamAllocation总结CallServerInterceptorOkio在Cac...原创 2019-03-29 13:11:58 · 431 阅读 · 0 评论 -
Retrofit的源码解读之Get请求
目录简单的Http请求的几个步骤Retrofit的实现过程创建Retrofit对象1)设置了Http请求依赖的架构默认的为OkHttp,实例化OkHttpClient对象2)根据不同的平台返回默认的回调执行器和Call执行器3)设置数据转换器创建请求网络1)创建自定义的网络接口2)通过动态代理解析出对应的请求,得到网络接口类3)发送请求总结简单的H...原创 2019-09-11 11:08:35 · 268 阅读 · 0 评论 -
Android 解决新浪分享之后回调出现两个icon进行选择
目录问题起源第一次尝试源码分析1.实例化WbShareHandler2.发送消息3.处理发送到微博SDK上的消息4.另外一个icon第二次尝试总结问题起源这几天翻看了项目中以前添加的新浪分享功能,发现有个问题是虽然添加了WbShareCallback,但是并没有真正的实现回调,而只是放了代码而已,所以就想着把新浪分享之后的回调给加进去。结果就开始各种踩坑...原创 2019-05-30 15:15:19 · 1275 阅读 · 1 评论 -
Support v4 24.0.0的在初始化中setUserVisibleHint中获取Context为null
目录问题追溯实现Fragment的延迟请求接口的解决方案升级到24.0.0版本的变化Debug查看setUserVisibleHint()1)在ViewPager中初始化Item,加载Fragment时,第一次调用setUserVisibleHint()2)设置ViewPager的第一个Fragment可见时,即在初始化时第二次调用到setUserVisibleHin...原创 2019-05-08 09:46:50 · 626 阅读 · 0 评论 -
OkHttp的源码解读
最近这几天在研究OkHttp的源码,就顺便整理了一些文档。Retrofit-OkHttpCall源码解读OkHttp之DispatcherOkHttp之getResponseWithInterceptorChain(一)OkHttp之getResponseWithInterceptorChain(二)OkHttp的Okio在CacheInterceptor中的应用经过一段时...原创 2019-03-29 13:57:28 · 215 阅读 · 0 评论 -
android sensor架构
Android Sensor 架构深入剖析 作者:倪键树,华清远见嵌入式学院讲师。1、Android sensor架构 Android4.0系统内置对传感器的支持达13种,它们分别是:加速度传感器 (accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(转载 2014-06-04 13:30:11 · 1870 阅读 · 0 评论 -
Android的本地密钥的安全性
在Android开发中,我们有时候可能需要将一些密码或者比较静态字符串放到APP里面,怎样保证这些数据的安全性呢?通常我们会将这些数据进行加密处理,那加密之后的数据存放到APP的什么地方呢?1、密钥本地存放保存加密数据的方式 安全性 直接放到sharedprefence中 安全性最低 直接编码到java文件中 不安全,dex很容易被逆向 密码分成几段,存...原创 2018-09-04 11:08:23 · 4723 阅读 · 0 评论