
android进阶
文章平均质量分 87
microhex
with great power comes great responsibility.
wx:javainstalling.
展开
-
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 · 1453 阅读 · 0 评论 -
Activity#onActivityResult被弃用了,该怎么办?
1. onActivityResult弃用现象和解决方法前几天更新了AndroidX之后,项目中的onActivityResult就被声明为@Deprecated,大概如下图:由于本人呢,是一个代码洁癖者,看着这个肯定不会很舒服,苦于没有时间,就没有仔细去好好分析,就放在一边呢。今天有点时间,我们就来扒一扒,看看onActivityResult是如何被弃用了,现在又该如何解决呢?其实,我们点击Activity#onActivityResult的源码的时候,就可以看到它自己说明的解决方案:在An原创 2022-05-07 17:34:49 · 4731 阅读 · 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 · 7417 阅读 · 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 · 3905 阅读 · 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 · 1908 阅读 · 0 评论 -
不看lifecycle源码,认真聊聊它的实现原理
目录1. lifecycle 简介2. lifecycle 用法3. lifecycle 原理1. lifecycle 简介 在我们的日常开发中,使用Activity和Fragment 产生的内存泄漏问题比比皆是,主要是原因就是这二者存在生命周期,在走完这一辈子的过程中,有些引用一直抓着着Activity和Fragment不放,等到它们Destroy的时候,依旧引用着它们的尸体,导致不能被回收,因为尸体将一直存在于内存中,导致可用内存减少,然后内存泄漏就开始了。当然了,扯远了,Go原创 2021-11-16 20:48:41 · 755 阅读 · 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 · 3154 阅读 · 0 评论 -
理解Room数据库的迁移(Migration)
文章目录数据库迁移的引擎SQLite API 都干了些啥Room 都干了些啥迁移 SQLite API 代码 到 Room情景一:保持数据库版本不变 --- app崩溃第一步:尝试打开数据库情景二:版本更新了,但是没有提供迁移策略 --- app崩溃第一步:更新数据库版本从1(已经安装到设备上了)到2情景三:版本更新了,回退到破坏性迁移 --- 数据库数据被清空了第一步:尝试从版本1更新到版本2第二步:尝试重新打开数据库情景四:版本更新了,也提供了迁移策略 --- 数据健在第一步:尝试更新版本1到版本2第二原创 2020-05-24 16:43:14 · 11074 阅读 · 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 · 10335 阅读 · 3 评论 -
Android基于云信实现微信斗图
总体概览最近项目出现了一个新的需求,需要实现类似微信的表情的斗图功能。由于我们是一家基于互联网+装修的公司,为了给业主创造一个好的印象和营造开工、完工的美好气象,这个需求我们还是默默的接了下来,虽然我们知道坑那是多得一比。下面我们就简单说明一下我们的方案。已经实现的功能大概是这样的:大致实现的功能如下:服务器动态配置斗图的类型和风格。因为每家公司的主题和风格样式都是不一样的,这里需要后...原创 2019-11-30 23:09:33 · 601 阅读 · 1 评论 -
Android Jetpack系列 之 WorkManager
大概 这应该是一篇比较悲伤的文章,因为WorkManager并没有达到它所描述的功能,所以作为天朝的程序员,此处静默哀悼一秒钟,具体文章下面详述。 虽然如此,我们还是要了解一下这个WorkManager是干什么的,具体怎么干,又有什么优点或者缺点。关于WorkManager的官方文档可见:https://developer.android.com/topic/librar...原创 2019-05-22 15:04:21 · 1625 阅读 · 0 评论 -
Android新控件MotionLayout介绍(四)
系列文章为:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)Android新控件MotionLayout介绍(三)本文标题:在MotionLayout中定义运动路径介绍在ConstraintLayout 2.0库中我们介绍了MotionLayout,这是一种主要是注重动画的布局。先前的文章中对它有了一些浏览,我非常鼓励你先把...翻译 2019-05-20 11:16:36 · 4753 阅读 · 3 评论 -
Android新控件MotionLayout介绍(三)
文章目录实例MotionLayout与CoordinatorLayoutMotionLayout 与DrawerLayoutMotionLayout 与ViewPagerMotionLayout与Lottie结论上两章内容:Android新控件MotionLayout介绍(一)Android新控件MotionLayout介绍(二)这一节主要讲述将MotionLayout与已经存在的Layo...翻译 2019-05-17 10:40:09 · 2063 阅读 · 0 评论 -
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 · 3123 阅读 · 1 评论 -
Android新控件MotionLayout介绍(一)
文章目录初衷为什么需要MotionLayout?MotionLayout的限制什么时候使用MotionLayout将MotionLayout添加到项目中使用MotionLayoutConstraintSetsMotionScene示例一:引用已经存在的布局OnSwipe handler示例2: 独立的MotionScene插入属性ConstraintSetMotionLayout的属性结束?初衷...翻译 2019-05-15 16:06:07 · 15117 阅读 · 6 评论 -
动手来写一个EventBus吧~~~~
最近在项目拍错过程中,使用的Eventbus出现了一个问题,然后翻了一下源码,感觉理解得差不多了,然后我动手实现了一个,当然是最简单的,为此,我希望通过本篇文章能将Eventbus的原理说清楚,应该不是很难。我实现的效果如下:首先在首页注册我的eventbus事件: override fun onCreate(savedInstanceState: Bundle?) { ...原创 2019-04-23 16:03:19 · 458 阅读 · 0 评论 -
360 RePlugin 初探
大概在项目整合的过程中,要使用到插件化,听说360的RePlugin 还不错,所以就按照文档学习了一下,在此记录一下里面的坑。项目地址:https://github.com/Qihoo360/RePlugin首先,我们需要Replugin有一个简单的认识,它是一个框架,你开发的app可以作为插件直接安装到宿主app中,直接完美运行。而这个插件可以随时安装和卸载,非常方便。对于需要频繁更新的a...原创 2019-04-09 16:51:04 · 1458 阅读 · 0 评论 -
密码中对称&非对称加密是什么意思?
在你学习和工作中,经常会用到各种加密算法来保护自己的信息安全,也经常听到对称和非对称加密的概念,可是仔细回想一下,这个对称和非对称到底是怎么来的,怎么个对称法?就自己学习的知识,咋们就来细说一下。为了理解加密算法,首先需要了解一下几个概念:基本概念密钥是密钥(yao 4声),不是秘钥! 百度百科的概念为:密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称...原创 2019-03-22 11:13:06 · 2014 阅读 · 0 评论 -
Android内存优化---关于内存泄漏场景
内存泄漏的由来 Android系统对每个应用都分配了一定大小的内存,内存的大小取决于终端硬件的配置和系统内部的算法。这个内存是存在上限的,Android系统为了充分使用有效的内存,会在应用内存不够用时,及时使用垃圾回收算法,回收已经使用过的内存。在Android系统回收过程中,使用的算法成为标记算法,对于GC Root不可达的对象,标记为可回收对象。那么内存泄漏的本质就是...原创 2019-03-03 17:47:52 · 305 阅读 · 0 评论 -
android IPC机制(四)
IPC机制我写过三个系列:android IPC机制(一)android IPC机制(二)android IPC机制(三)基本上是从最简单的IPC讲起,从最初的Serializable & Parcelable,到Binder对象,最后到Messeager对象。今天主要是来总结一下AIDL。学习的过程是一个循序渐进的过程,以前有很多东西不了解,随着工作的深入,慢慢会有自己的体会和见...原创 2018-11-19 15:26:02 · 385 阅读 · 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 · 1544 阅读 · 0 评论 -
View事件体系简介
1.View的基础概念  View是Android中控件的基类,是一种界面层控件的一种抽象,它代表的是一个控件。除了View,还有ViewGroup,从名字来看,它可以被翻译成控件组,言外之意就是ViewGroup中可以包含多个控件。而在Android设计中,ViewGroup也是继承了View,这意味着View本身就可以是单个控件也可以是多个控件组成的一组控件,这种关心与W...原创 2018-11-07 22:14:04 · 473 阅读 · 0 评论 -
ConstraintLayout动画入门
前面有篇文章简单介绍了一下ConstraintLayout,如果有不熟的地方,可以自行查看。这里主要介绍一下ConstraintLayout可以实现的动画。具体什么样的呢? 我们先看一个复杂一点的dome:这里的ConstraintLayout动画主要是将XML中的代码转化到Java代码中即可,还是标间简单的,只是官方给的文档不多,也不知道自己学的对不对。先一个一个来吧。首先需要添加一个t...原创 2018-11-02 14:06:18 · 3177 阅读 · 0 评论 -
ConstraintLayout入门笔记
  ConstraintLayout翻中文为约束布局,已经出来一阵子了,话说它有减少布局层级并优化布局的功效(其实是我很懒,因为AS默认布局换成了ConstraintLayout,我懒得改才开始学习这个Layout),记录一下自己学习的过程。1.尺寸ConstraintLayout下的view尺寸与一般像RelativeLayout,LinearLayout下的尺寸有些区别...原创 2018-10-30 23:39:51 · 679 阅读 · 0 评论 -
美团开源日志框架Logan初探
最近群里的美团童靴发了个链接,说自家的日志框架Logan开源了,地址为Logan,中文介绍地址为Logan。闲的无聊就体验了一把,如果你想了解一下,不妨花点时间阅读一下本文。首先非常感谢美团童靴大公无私的精神,将自己的心血开源。自己也学习了一波,这个框架使用起来非常简单,方法非常少,大致的使用步骤分为以下几步:初始化LoganConfig 你可以在application中初始化,也可以在Ac...原创 2018-10-17 22:00:57 · 10891 阅读 · 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 · 4362 阅读 · 0 评论 -
关于Dagger2的一些个人理解
写作目的现在基本上有一些规模的项目,都使用了Dagger2,也不是装13,个人感觉也的确是大势所趋,Dagger2的确有它的优势。借着手上的项目,学习了一下Dagger2,打算用在公司的项目中。今天就来以自己初学者的角度来谈谈dagger2的认识。问题由来我是目前是移动端开发者,主要从事的是Android端开发。在andorid开发过程中,按照套路我们会有SharePreferen...原创 2018-03-21 22:48:54 · 2435 阅读 · 0 评论 -
设计模式之享元模式
开篇2018年的第一篇博客居然是开年后的第一个周末,换了公司之后,事情比较多,也比较忙,直到现在才有点时间可以写点自己要写的东西。2018年对自己好好加油,努力学好技术[加油]。享元模式享元英文是flyweight,代表轻量级的意思。当初第一次接触这个名词时,我感觉应该是share model(共享元素),哈哈哈。享元模式是对象池的一种实现。啥叫对象池?线程池懂吧?线程池里面全是线程,...原创 2018-02-25 23:28:19 · 274 阅读 · 0 评论 -
使用TabLayout撸出多颜色的Tab
换了份公司,差不多两个月没有写博客了。新的公司,新的需求,还是比较坑爹的,给大伙看一下做成什么样子的东西: 由于项目刚开始的时候,没有想那么多,直接使用了android.support.design.widget.TabLayout,原因很简单,是因为懒和这个东西成熟,可是项目快要结束了,UI给我来了个有些地方你得加上颜色标注一下,搞得当时就想换个第三方的库,苦于时间的关系,还是看了下Tab原创 2017-12-03 20:07:09 · 867 阅读 · 0 评论 -
GreenDao3.2数据库使用教程
greenDao [github地址](https://github.com/greenrobot/greenDAO)相关gradle配置// 根目录下 build.gradle 文件:buildscript { repositories { jcenter() mavenCentral() // add repository } depen原创 2017-09-29 14:26:21 · 1275 阅读 · 0 评论 -
ConstraintLayout入门
题外话 AS2.3之后,Android默认的Layout根布局从LinearLayout换成了ConstraintLayout,这东西听说用起来蛮不错的,本着对LinearLayout布局精通的理解(此处微笑脸),很长一段时间都一上来就把ConstraintLayout直接替换成LinearLayout和RelativeLayout,但是换多了,人又变懒了,又不想改XML模版,索性把这个东西学原创 2017-09-22 10:25:04 · 626 阅读 · 0 评论 -
VasSonic源码解析(一)
前言 大家都知道这个Hybird框架最近都快疯了,它旨在专注于提升页面首屏加载速度,完美支持静态直出页面和动态直出页面,兼容离线包等方案。由于加了它的官方群,也讨论了一些原理,认识了一些朋友也有这方面的需求,加上自己也要优化自己的H5页面,那么我就今天看了一下这个源码,看看人家大佬写的东西,是个啥玩意。 个人来说,自己本没有信心来分析这种源码的,但还是今天下午硬着头皮去试了一下。如原创 2017-09-19 19:00:41 · 1576 阅读 · 0 评论 -
对于Dagger2,我有句话要说
题外话 最近接手了一个很奇葩的项目,怎么奇葩呢?Java中混杂着kotlin,kotlin中带着MVP,MVP中混着Dagger2,还有什么RxJava,Retrofit等目前Andorid开发的标配。由于对kotlin只是停留在小打小闹上,充其量也就是基本了解kotlin语法,真要用它写项目,本宝宝内心其实是拒绝的;这还不算事,关键是对Dagger2也是一无所知,以前不是不想学这个Dagge原创 2017-09-18 22:45:46 · 617 阅读 · 0 评论 -
ARouter基本使用详情
由于公司项目进行了拆分,我司就用上了阿里的这个ARouter框架。对于为啥使用这个框架,我相信很多人知道原因,借用阿里的云栖社区的一段话:我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在M原创 2017-08-13 22:09:59 · 17853 阅读 · 7 评论 -
Retrofit运行方式详解版
概述 在最近的项目中,由于对于Retrofit仅仅处于用的状态,导致很多代码虽然实现了功能,但是性能和书写上出现了很大问题。在项目上线之后,现在终于有时间可以深入一些源码,通过看源码了解Retrofit的运行方式,文中基本上都是个人的想法,如果有错误,请指出。 对于需要理解的Retrofit源码,大致需要知道如下几个类:convertFactory,callAdapterFactory原创 2017-08-13 08:54:23 · 651 阅读 · 0 评论 -
关于RxJava运行原理(一)
最近可能是比较忙吧,很多事很麻烦,搞得蛮烦躁的。周末才有点时间看看书,写写东西,中午骑车时还把脚给摔伤了,哎,命苦啊。前端时间写了关于RxJava的一些操作符,那么今天就来看看源码,试着去看RxJava的内部实现过程吧。这次我觉得不会写很多,就一个方法:Observable.create(new OnSubscribe<String>() { @Override原创 2017-06-04 23:53:51 · 2577 阅读 · 0 评论 -
其实你可以读懂OKHttp3的源码
因为公司的项目中使用了的Retrofit2+OK3,所以有时间闲下来还是有必要研究一下它的源码,本来就抱着试试看的心态,项目上线了,休息休息也是可以的,呵呵。所以就走马观花的去读了一遍,写下自己的分享,作为一个新人,在没有提前看别人的分析的情况下,我想我是看懂了一点点,大家不要见笑。基于OK3的源码啊。。先来看个请求吧,普通的GET请求,服务器也是我自己搭建的(thinkPHP3.3环境,不要问我为原创 2017-04-28 10:43:32 · 920 阅读 · 0 评论 -
android WebView上传文件到服务器[android+server代码]
最近比较坑爹,公司app部分页面要转H5,美其名曰称之为节约人力成本,无奈,我们就从后台PHP,JQuery从零开始学起。项目中遇到这么一个问题:要从android的WebView中上传用户头像到服务器,当初感觉蛮简单的,就没怎么注意,没想到一道道大坑摆在我面前,特此记录一下。前端界面蛮丑的,这么就不说,基本上就像下图一样: 这里的加号图片,主要是美化上传用的,它还有一个作用就是图片预览功能,基本原创 2017-04-01 22:31:41 · 2999 阅读 · 2 评论 -
读书笔记(二)---看看LayoutInflater的源码
饱汉模式在读完单例模式的介绍之后,发现android的很多系统级的服务都是以单例模式存在的,我们很多时候都是以这种方式进行调用的:LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);这里的getSystemService我们可以看源码: @Override public Ob原创 2017-03-05 18:14:34 · 652 阅读 · 0 评论 -
读书笔记(一)---单例模式
朋友介绍的,买了本《Android源码设计模式解析与实战》,趁现在有时间,好好啃啃,做做记录。 对于单例模式,我相信基本上每个程序员都知道怎么写了,但是懒汉式与饿汉式的区别,DCK(Double Check Lock)有没有问题,静态内部类单例模式和枚举单例,是否每个人都知道呢?定义说得简单点,就是我系统项目里,这个类的对象也能出现一次,它不能被外部实例化,可以向系统提供获取这个实例的方法。关键点原创 2017-02-26 17:44:35 · 661 阅读 · 0 评论