android进阶
文章平均质量分 87
microhex
with great power comes great responsibility.
展开
-
Hilt加强篇:理解Component和Scoped
1. 历史上次写过一遍关于Hilt的使用偏,里面详细介绍了Hilt历史和应用,链接对应如下:Android Hilt 使用如果没有对Hilt的使用有些了解,那就先入门看看,谢谢。2. ComponentComponent和Scope的英文名分别是组件和范围的意思,第一次见到这个两个注解的时候,还是有些不清楚的。下面慢慢说,Hilt-Android中存在8个Component和对应的8个Scope,先来聊一聊这个8个Component,分别为:序列名称创建时间销毁时间1S原创 2022-05-15 16:41:26 · 1187 阅读 · 0 评论 -
Activity#onActivityResult被弃用了,该怎么办?
1. onActivityResult弃用现象和解决方法前几天更新了AndroidX之后,项目中的onActivityResult就被声明为@Deprecated,大概如下图:由于本人呢,是一个代码洁癖者,看着这个肯定不会很舒服,苦于没有时间,就没有仔细去好好分析,就放在一边呢。今天有点时间,我们就来扒一扒,看看onActivityResult是如何被弃用了,现在又该如何解决呢?其实,我们点击Activity#onActivityResult的源码的时候,就可以看到它自己说明的解决方案:在An原创 2022-05-07 17:34:49 · 4335 阅读 · 0 评论 -
DataStore的基础用法
0. 简介Google在推出JetPack组件以来,一直推荐我们使用DataStore组件替代到我们第一天学android就知道的SharedPreferences组件,原因很简单,因为当年的SharedPreferences存在居多的问题,DataStore就是为了解决这些问题而来的。1. SP的缺点至于 SP到底存在哪些问题,我们可以直接查看 DataStore源码上的注释:Synchronous API encourages StrictMode violationsapply() an原创 2021-12-18 12:33:55 · 7110 阅读 · 2 评论 -
Android 10以上,保存视频通知到相册
代码如下:public static void videoSaveToNotifyGalleryToRefreshWhenVersionGreaterQ(Context context, File destFile) { ContentValues values = new ContentValues(); Uri uriSavedVideo; if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {原创 2021-11-27 22:01:56 · 3734 阅读 · 8 评论 -
Android MVI 架构简介
翻译来自 Medium :https://medium.com/@soundhar.p03/android-mvi-architecture-230cd30e40b4大家有时间和精力可以阅读原文,翻译可能不怎么到位,到时候网批评指正。大家好,在本篇博客中,我们就会讨论有关Andorid的MVI设计模式。近些日子有关Andorid架构模式都在逐步进化中。对于我们开发的App中,我们开始面临新的挑战和困难。新的设计模式将会被发现来解决类似的问题。作为Andorid开发人员,我们已经拥有了MVC、MVP翻译 2021-11-27 20:45:35 · 1812 阅读 · 0 评论 -
不看lifecycle源码,认真聊聊它的实现原理
目录1. lifecycle 简介2. lifecycle 用法3. lifecycle 原理1. lifecycle 简介 在我们的日常开发中,使用Activity和Fragment 产生的内存泄漏问题比比皆是,主要是原因就是这二者存在生命周期,在走完这一辈子的过程中,有些引用一直抓着着Activity和Fragment不放,等到它们Destroy的时候,依旧引用着它们的尸体,导致不能被回收,因为尸体将一直存在于内存中,导致可用内存减少,然后内存泄漏就开始了。当然了,扯远了,Go原创 2021-11-16 20:48:41 · 711 阅读 · 0 评论 -
Android Hilt 使用
文章目录a. 关于 Hiltb. 添加依赖项c. Hilt 应用1. HiltAndroidApp 注解2. 注入Android类3. 如果注入接口4. 如果注入的对象不能new5. @ApplicationContext 和 @ActivityContext6. Android类生成组件i. 全局单例模式ii. Activity内多Fragment共用组件d. 资料a. 关于 Hilt首先 Hilt 是 Android 的依赖注入库。什么是依赖注入?简单点理解就是Java中我们使用对象时,需要去 ne原创 2021-08-14 20:59:03 · 3014 阅读 · 0 评论 -
理解Room数据库的迁移(Migration)
文章目录数据库迁移的引擎SQLite API 都干了些啥Room 都干了些啥迁移 SQLite API 代码 到 Room情景一:保持数据库版本不变 --- app崩溃第一步:尝试打开数据库情景二:版本更新了,但是没有提供迁移策略 --- app崩溃第一步:更新数据库版本从1(已经安装到设备上了)到2情景三:版本更新了,回退到破坏性迁移 --- 数据库数据被清空了第一步:尝试从版本1更新到版本2第二步:尝试重新打开数据库情景四:版本更新了,也提供了迁移策略 --- 数据健在第一步:尝试更新版本1到版本2第二原创 2020-05-24 16:43:14 · 10688 阅读 · 3 评论 -
koltin协程图片加载库Coil介绍
文章目录简单介绍使用1.简单使用2.基本变换3. Gif加载4. SVG加载5. 从Glide\Picasso迁移到Coil6. 个人的使用看法简单介绍github地址为:https://github.com/coil-kt/coil/ 这应该是一个很新的一个图片加载库,完全使用kotlin编写,使用了kotlin的协程,图片网络请求方式默认为Okhttp,相比较于我们...原创 2020-03-14 20:25:26 · 9971 阅读 · 3 评论 -
Android基于云信实现微信斗图
总体概览最近项目出现了一个新的需求,需要实现类似微信的表情的斗图功能。由于我们是一家基于互联网+装修的公司,为了给业主创造一个好的印象和营造开工、完工的美好气象,这个需求我们还是默默的接了下来,虽然我们知道坑那是多得一比。下面我们就简单说明一下我们的方案。已经实现的功能大概是这样的:大致实现的功能如下:服务器动态配置斗图的类型和风格。因为每家公司的主题和风格样式都是不一样的,这里需要后...原创 2019-11-30 23:09:33 · 537 阅读 · 1 评论 -
ConstraintLayout入门笔记
  ConstraintLayout翻中文为约束布局,已经出来一阵子了,话说它有减少布局层级并优化布局的功效(其实是我很懒,因为AS默认布局换成了ConstraintLayout,我懒得改才开始学习这个Layout),记录一下自己学习的过程。1.尺寸ConstraintLayout下的view尺寸与一般像RelativeLayout,LinearLayout下的尺寸有些区别...原创 2018-10-30 23:39:51 · 624 阅读 · 0 评论 -
ConstraintLayout动画入门
前面有篇文章简单介绍了一下ConstraintLayout,如果有不熟的地方,可以自行查看。这里主要介绍一下ConstraintLayout可以实现的动画。具体什么样的呢? 我们先看一个复杂一点的dome:这里的ConstraintLayout动画主要是将XML中的代码转化到Java代码中即可,还是标间简单的,只是官方给的文档不多,也不知道自己学的对不对。先一个一个来吧。首先需要添加一个t...原创 2018-11-02 14:06:18 · 3004 阅读 · 0 评论 -
View事件体系简介
1.View的基础概念  View是Android中控件的基类,是一种界面层控件的一种抽象,它代表的是一个控件。除了View,还有ViewGroup,从名字来看,它可以被翻译成控件组,言外之意就是ViewGroup中可以包含多个控件。而在Android设计中,ViewGroup也是继承了View,这意味着View本身就可以是单个控件也可以是多个控件组成的一组控件,这种关心与W...原创 2018-11-07 22:14:04 · 448 阅读 · 0 评论 -
理解Java ClassLoader & Android ClassLoader
1.Java中的ClassLoader分为两种类型:系统加载器和自定义类加载器;其中系统加载器包括三种:BootStrap ClassLoader、Extensions ClassLoader和Application ClassLoader。其分别的作用是:1.1 BootStrap ClassLoader(引导类加载器)使用C/C++实现的加载器,用于加载指定的JDK核心类库,像java....原创 2018-11-13 12:20:51 · 1499 阅读 · 0 评论 -
android IPC机制(四)
IPC机制我写过三个系列:android IPC机制(一)android IPC机制(二)android IPC机制(三)基本上是从最简单的IPC讲起,从最初的Serializable & Parcelable,到Binder对象,最后到Messeager对象。今天主要是来总结一下AIDL。学习的过程是一个循序渐进的过程,以前有很多东西不了解,随着工作的深入,慢慢会有自己的体会和见...原创 2018-11-19 15:26:02 · 350 阅读 · 0 评论 -
Android内存优化---关于内存泄漏场景
内存泄漏的由来 Android系统对每个应用都分配了一定大小的内存,内存的大小取决于终端硬件的配置和系统内部的算法。这个内存是存在上限的,Android系统为了充分使用有效的内存,会在应用内存不够用时,及时使用垃圾回收算法,回收已经使用过的内存。在Android系统回收过程中,使用的算法成为标记算法,对于GC Root不可达的对象,标记为可回收对象。那么内存泄漏的本质就是...原创 2019-03-03 17:47:52 · 273 阅读 · 0 评论 -
密码中对称&非对称加密是什么意思?
在你学习和工作中,经常会用到各种加密算法来保护自己的信息安全,也经常听到对称和非对称加密的概念,可是仔细回想一下,这个对称和非对称到底是怎么来的,怎么个对称法?就自己学习的知识,咋们就来细说一下。为了理解加密算法,首先需要了解一下几个概念:基本概念密钥是密钥(yao 4声),不是秘钥! 百度百科的概念为:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称...原创 2019-03-22 11:13:06 · 1940 阅读 · 0 评论 -
360 RePlugin 初探
大概在项目整合的过程中,要使用到插件化,听说360的RePlugin 还不错,所以就按照文档学习了一下,在此记录一下里面的坑。项目地址:https://github.com/Qihoo360/RePlugin首先,我们需要Replugin有一个简单的认识,它是一个框架,你开发的app可以作为插件直接安装到宿主app中,直接完美运行。而这个插件可以随时安装和卸载,非常方便。对于需要频繁更新的a...原创 2019-04-09 16:51:04 · 1393 阅读 · 0 评论 -
动手来写一个EventBus吧~~~~
最近在项目拍错过程中,使用的Eventbus出现了一个问题,然后翻了一下源码,感觉理解得差不多了,然后我动手实现了一个,当然是最简单的,为此,我希望通过本篇文章能将Eventbus的原理说清楚,应该不是很难。我实现的效果如下:首先在首页注册我的eventbus事件: override fun onCreate(savedInstanceState: Bundle?) { ...原创 2019-04-23 16:03:19 · 433 阅读 · 0 评论 -
Android新控件MotionLayout介绍(四)
系列文章为:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)Android新控件MotionLayout介绍(三)本文标题:在MotionLayout中定义运动路径介绍在ConstraintLayout 2.0库中我们介绍了MotionLayout,这是一种主要是注重动画的布局。先前的文章中对它有了一些浏览,我非常鼓励你先把...翻译 2019-05-20 11:16:36 · 4538 阅读 · 3 评论 -
Android新控件MotionLayout介绍(一)
文章目录初衷为什么需要MotionLayout?MotionLayout的限制什么时候使用MotionLayout将MotionLayout添加到项目中使用MotionLayoutConstraintSetsMotionScene示例一:引用已经存在的布局OnSwipe handler示例2: 独立的MotionScene插入属性ConstraintSetMotionLayout的属性结束?初衷...翻译 2019-05-15 16:06:07 · 14907 阅读 · 6 评论 -
Android新控件MotionLayout介绍(二)
文章目录自定义属性ImageFilterView (1/2)ImageFilterView (2/2)关键帧Keyframe (1/2), 位置Keyframe (1/2), 属性结论有关 Android新控件MotionLayout介绍(一)。今天主要是来看第二章。主要是通过一系列包括自定义属性、图片操作和关键帧来描绘一下MotionLayout的特征。原文地址为:https://me...翻译 2019-05-16 10:59:43 · 2983 阅读 · 1 评论 -
Android新控件MotionLayout介绍(三)
文章目录实例MotionLayout与CoordinatorLayoutMotionLayout 与DrawerLayoutMotionLayout 与ViewPagerMotionLayout与Lottie结论上两章内容:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)这一节主要讲述将MotionLayout与已经存在的Layo...翻译 2019-05-17 10:40:09 · 1983 阅读 · 0 评论 -
Android Jetpack系列 之 WorkManager
大概 这应该是一篇比较悲伤的文章,因为WorkManager并没有达到它所描述的功能,所以作为天朝的程序员,此处静默哀悼一秒钟,具体文章下面详述。 虽然如此,我们还是要了解一下这个WorkManager是干什么的,具体怎么干,又有什么优点或者缺点。关于WorkManager的官方文档可见:https://developer.android.com/topic/librar...原创 2019-05-22 15:04:21 · 1570 阅读 · 0 评论 -
看看Retrofit2.0运行方式
写下这篇你文章,主要是纪念自己的无知和善良,以及要好好学习啊。 都说Retrofit是大Android目前最简单的网络请求框架,和RxJava结合简直就是天人合一,的确,项目中用来一下,的确好用,好玩,也好快(这要靠OkHttp的功劳),写下这个纪念一下Retrofit2.0的工作流程,菜鸟大神勿喷。首先,gradle配置: compile 'io.reactivex:rxjava:1.1.0原创 2016-09-25 16:22:48 · 4091 阅读 · 0 评论 -
美团开源日志框架Logan初探
最近群里的美团童靴发了个链接,说自家的日志框架Logan开源了,地址为Logan,中文介绍地址为Logan。闲的无聊就体验了一把,如果你想了解一下,不妨花点时间阅读一下本文。首先非常感谢美团童靴大公无私的精神,将自己的心血开源。自己也学习了一波,这个框架使用起来非常简单,方法非常少,大致的使用步骤分为以下几步:初始化LoganConfig 你可以在application中初始化,也可以在Ac...原创 2018-10-17 22:00:57 · 10419 阅读 · 1 评论 -
深入分享一下android.widget.Toast
问题来源  Toast是我们Android大开发中比不可少的显示部分,相信大家很熟悉Toast的使用方式。之所以写这篇文章,主要是我在项目中遇到了这样一个问题,PM说的Toast在某个特定的页面显示的时长能不能合适一点,什么意思?我们大Toast只有Toast.LENGTH_SHORT和Toast.LENGTH_LONG两种,前者是2s,后者是显示3.5s。嗯,有些页面的确...原创 2018-06-12 21:39:46 · 4263 阅读 · 0 评论 -
关于Dagger2的一些个人理解
写作目的现在基本上有一些规模的项目,都使用了Dagger2,也不是装13,个人感觉也的确是大势所趋,Dagger2的确有它的优势。借着手上的项目,学习了一下Dagger2,打算用在公司的项目中。今天就来以自己初学者的角度来谈谈dagger2的认识。问题由来我是目前是移动端开发者,主要从事的是Android端开发。在andorid开发过程中,按照套路我们会有SharePreferen...原创 2018-03-21 22:48:54 · 2347 阅读 · 0 评论 -
android 步骤指示器实现
最近在弄PHP,android端需要弄一个指示器,如下图这样的,本来以为要些时间就想网上找了,可是马蛋周五刚好公司没网,好吧,就自己弄了一个,发现还很简单,做个记录吧: 下面说一下实现过程,先说水平的HorizontalStepView,主要是onDraw方法,由于本人水平比较菜,所以就写了四个方法,分别为: @Override protected void onDr原创 2017-02-19 23:06:58 · 4389 阅读 · 0 评论 -
抓包抓出的APP
写作的目的好久没有写博客了,最近一段时间比较忙,总是在讨论公司的业务逻辑去了,技术落下了一大堆了,好了,不扯了,说说今天的主题吧。最近利用晚上的时间,使用Fiddler抓包,把InfoQ、ITEye、CSDN、泡在网上的日子,开源中国,获得了一些数据,然后整理了一下,为了练手做了个小App。先看看成果吧: 抓包我一般也就是使用Fidder,相信很多人都用过吧,具体页面如下,具体的方法大家也就原创 2016-12-04 13:09:13 · 2561 阅读 · 2 评论 -
自定义View_一个非常简洁的柱状图
快过年了,提前祝大家新年快乐哦。马上就可以闲下来休息几天了,好幸福啊。。。不多说了,最近项目中有个地方要用柱状图显示客户的消费情况,本着一名程序员的优秀品质,上gitbub上连续搜罗了有关画图的,不得不说,真心蛮多的,不仅仅功能多,而且很多都已经高度封装,很好用了。但是唯一的缺点就是它们有些功能我们产品用不上,就为了显示一个小柱状图就compile一个别人的项目,有点得不偿失啊。所以我就自己撸了一个原创 2017-01-14 16:30:56 · 2553 阅读 · 0 评论 -
面向对象的原则(一)
扯淡首先给自己,给大家拜个早年,祝大家在新的一年里找工作的找到好工作,找女票的找到女票,挣钱的好好挣钱……好了,扯多了,说说自己吧,差不多也写了android快一年了,15年12月份正式入职了现在的公司,到现在公司app也写到了3.2了,一年多的时间,很多值得回味,来到了上海,失去了女票,app从无到有,不过这都是后话,估计过年的时候,我会认真的写一篇关于自己的年终总结吧。 一年多的时间,连原创 2017-01-08 16:00:42 · 473 阅读 · 0 评论 -
实现一个简单的android开关
最近在学习android中的graphics中画图系列,按照大神思路,找葫芦画瓢实现了一个开关,如图下: 记录一下实现方式:1.画背景 上图形状,分成两个半圆与一个矩形,那么代码可以写成: private void drawBackground(Canvas canvas) { mBackGroundPaint.setColor(mCurrentBackGroundColor)原创 2016-12-11 15:46:59 · 4069 阅读 · 2 评论 -
Retrofit掉坑记录(一)
随着项目的深入,Retrofit会深入学习,本系列应该当入坑先驱了,不说了,都是累1.@QueryMap AND @FieldMap 错用将会导致HTTP 414错误 首先借用HTTP 414的某百科解释 : 您的 Web 服务器认为,客户端(如您的浏览器或我们的 CheckUpDown 机器人)发送的 HTTP 数据流包含一个过长网址, 即字节太多。 相信了解了414解释的,就知道我错误在哪原创 2016-09-26 22:06:16 · 5418 阅读 · 2 评论 -
android IPC机制(三)
IPC方式使用Bundleandroid中三大组件activity,service和Recevicer都支持Intent中传递Bundle数据,由于Bundle实现了Parcelable接口,所以可以在不同的进程中传输。查看Bundle源码,Bundle可以传递基本类型,实现了Parcelable和Serializable接口的类对象,还有一些Android支持的特殊类型对象ArrayList,Sp原创 2016-09-25 14:29:25 · 556 阅读 · 0 评论 -
使用Retrofit2.0上传文件,可以监听上传进度[客户端+服务器端代码]
闲话少说啊,最近项目随大流,用上了传说中的Retrofit进行网络交互,个人负责的模块上有个检测文件上传的进度【这里吐槽一下砸门办公室的网速真TM差,真想把PM打一顿】。以前使用的XUtils中有个方法自带了上传回调的方法,现在用了这个Retrofit,虽说网上有些人说过怎么检测,但大多没有什么代码,按照他们的说法,我好像没成功,自己来吧。对于Retrofit2.0本屌丝也是个新手,有些地方刚开始学原创 2016-07-05 23:49:49 · 10471 阅读 · 10 评论 -
android 富文本编辑器之路
项目中有个功能是用户使用富文本自定义商品描述,一开始真的不知道该怎么做,先说得逼格高一点,这需要HTML,JAVASCRIPT,ANDROID等共同技术的组合,然后在网上down了一个,源网址如下:https://github.com/wasabeef/richeditor-android 但是毕竟开源的,有些东西是不能满足需求的,然后就在此基础上改成了这样: 话说这个编辑器好像跟上面开源的没什么原创 2016-07-31 09:42:25 · 873 阅读 · 1 评论 -
android IPC机制(一)
IPC是Inter-Process Communication的缩写,意为进程间通信或者叫跨进程间通信,也就是不同的进程间相互交换数据。虽然说的很高大上,事实上我们天天都在用,使用Intent,Bundle,contentProvider等传值的就是进程间通信的介质,只是没有太在意罢了。进程与线程按照OS的描述,线程是CPU调度的最小单位,也就是说是一种有限的系统资源。而进程是指一个执行单元,在PC原创 2016-08-02 23:09:38 · 627 阅读 · 0 评论 -
android IPC机制(二)
Binder对象是android中的一个类,实现了IBinder接口,是一种android中实现跨进程通信的一种方式,可以ManagerService连接各种Manager(LayoutManager,ServiceManager,ActivityManager,SensorManager等等)和各种相应ManagerService的桥梁。 AIDL文件之自动生成的java文件每次书写aidl文件之原创 2016-08-06 23:49:22 · 1806 阅读 · 0 评论 -
读书笔记(一)---单例模式
朋友介绍的,买了本《Android源码设计模式解析与实战》,趁现在有时间,好好啃啃,做做记录。 对于单例模式,我相信基本上每个程序员都知道怎么写了,但是懒汉式与饿汉式的区别,DCK(Double Check Lock)有没有问题,静态内部类单例模式和枚举单例,是否每个人都知道呢?定义说得简单点,就是我系统项目里,这个类的对象也能出现一次,它不能被外部实例化,可以向系统提供获取这个实例的方法。关键点原创 2017-02-26 17:44:35 · 621 阅读 · 0 评论