Android
文章平均质量分 74
tangedegushi
这个作者很懒,什么都没留下…
展开
-
Jfrog 搭建本地maven仓库以及上传Android库
团队间协同工作,各自负责的功能不一样,有时需要对外提供接口,方便调用自己开发的功能,这时候就需要提供jar或aar包,这时候就会遇到jar或aar的拷贝工作,而且每修改一次都需要重复类似的工作,这时候引入maven本地库就可以很方便的解决这个问题了原创 2023-03-07 10:18:20 · 3079 阅读 · 1 评论 -
Android设置之Preference源码实现
设置页面超简单实现,同时也是阅读系统setting应用必不可少原创 2023-02-02 17:31:44 · 2305 阅读 · 0 评论 -
Android导航组件Navigation实现原理
对于导航组件的使用方式不是本文的重点,具体使用可以参考官方文档,导航组件框架是通过fragment来实现的,其核心类主要可以分为三个NavGraph、NavHostController、NavHostFragment,这三个类的作用分别是:NavGraph:解析导航图xml获取到的对象,其内部主要维护了一个集合用来存储目的地,当导航到目的地时,会传递进来一个id,这个id有可能导航图xml中fragment的id,也有可能是fragment节点下action节点的id...原创 2022-02-07 18:02:30 · 2934 阅读 · 0 评论 -
Parcelable 原理解析
Android实现进程间通讯,首选的数据传递就是Parcelable了,接下来主要讲的就是Parcelable实现数据传递的原理,对于使用,可以直接在网上百度。对于已经使用过Parcelable的,不知道有没有发现,不管是读数据还是写数据,都涉及到一个对象,这个对象就是Parcel,内部数据传递实际使用的就是这个对象,接下来就来看看是如何实现的。 要分析Parcel,首先要思考的是该如何下手,Parcel主要是用于进程间通讯,那么首先想到就是aidl了,先来编写一个aidl文件:.原创 2021-02-05 19:02:45 · 765 阅读 · 1 评论 -
Android捕获全局异常
Android捕获全局异常其实利用的就是Thread捕获异常,Android中的UI线程其实就是一个普通的Thread,不过它里面维护了一个Handler,这个Handler对Android的整个应用的运行起到了很大的作用,可以这么说Android应用的运行就是基于Handler。 接下来让我们来看看Thread类是如何捕获异常的,Thread中有一个接口,如下:pu...原创 2018-04-10 14:04:55 · 884 阅读 · 0 评论 -
android性能优化之布局优化
布局选择概述对于界面优化,需要考虑的主要有两点,测量次数以及过度绘制的问题,这个需要考虑的就是所需选用的布局,所选的布局不同,会直接影响到子布局的绘制次数,下面以常用布局为例,一般情况下:LinearLayout和FrameLayout的子view都是测量一次的,其中LinearLayout有个特殊的情况,就是如果他的子view设置weight属性,这时LinearLayout的子view是会测量两次的,对于RelativeLayout和ConstraintLayout布局,子view都是需要测量两次的,原创 2020-06-05 11:15:34 · 289 阅读 · 0 评论 -
Android性能优化之耗时方法
应用做完后,有时候会发现应用比较卡或是反应比较慢,这时候就得去排查是什么原因导致的响应慢,我们的第一反应就是哪个函数执行是比较耗时的,那该怎么去排查耗时函数呢,在可能耗时的函数里答应执行时间么,那这个工作量就有点大了,也不利于维护,这里所以分享的就是如何去查找耗时函数,该如何去查找呢?这里先来看下代码实现,后面再来说说实现的原理:public class MethodMonitor implements Runnable { private Handler mLogHandler; pr原创 2020-05-12 10:55:12 · 903 阅读 · 1 评论 -
android仿地铁行进线路图
在坐地铁的时候,能看到有些地铁上是有地铁行进动画和站点到达动画的,最近在做项目的时候,就有一个类似这样的需求,不同的是展示的点有限制,多出来的点是需要是折贴起来的,当需要展示时再拉出来,大致动画如下:看到这样一个动画,你有什么想法呢?对于这个动画,我有一个同事使用的是RecycleView去做的,做出来后差不多有十几个类,里面的逻辑还是比较复杂的,由于同事离职,这里面还有一些问题存在,由我接手...原创 2020-03-06 11:02:23 · 2705 阅读 · 2 评论 -
Arouter原理详解
对于组件化这个东西这里就不进行讲解了,组件化本身的目的是为了解耦,各个组件负责各自的功能,然后把各个组件组合起来就是一个完整的项目了,组合起来的时候,就会涉及到组件间的通讯问题,比如这个module的Activity调用另外一个module的activity,如果是直接调用,那显然他们之间就有了耦合了,为了组件间的解耦,这个时候就可以用到Arouter了,关于Arouter的使用这里可以去Git上...原创 2019-12-11 16:01:16 · 801 阅读 · 0 评论 -
android插件化相关hook及资源加载
概述这篇文章主要讲述的有以下几点:如何hook系统中的一些类,以达到我们想要实现的功能;如何去加载插件中的class文件;如何去加载插件中的资源;要了解插件化,对这几个点是必须要知道的,插件化也是在这几个点的基础上逐渐进行完善的。hook系统中的哪些类1、Instrumentation;2、IActivityManager;3、Handler;Instrumentation...原创 2019-10-15 11:31:00 · 564 阅读 · 0 评论 -
android架构组件之paging源码解析
RecyclerView使用paging就是多了对数据的拉取,使得RecyclerView的数据和显示更加的解耦,RecyclerView对paging的使用多了如下几步: instance = CustomAdapter.getInstance(this); factory = new CustomPageDataSourceFactory<>()...原创 2019-09-05 15:29:03 · 2543 阅读 · 2 评论 -
android架构组件之paging如何优雅实现加载提示
在使用paging的过程中,使用起来是很方便,但也发现一些问题,比如往下滑的时候,没有加载的提示(数据正在加载中),这个时候就需要我们去处理了,数据加载可能是成功了,可能是失败了,也可能是全部加载完成了,加载过程中还有加载的结果都是需要一个友好的提示的,我们看到好多APP应用都是在item底部会有一个友好的提示,所有这边文章就是来实现如何在底部添加一个友好提示的item,数据加载成功后会自动消失。...原创 2019-09-04 16:25:02 · 879 阅读 · 0 评论 -
RecyclerView(五):SnapHelper对惯性滑动的作用说明
概述SnapHelper可以看做是RecyclerView惯性滑动的一个辅助类,可以帮我们做一些惯性滑动时和滑动后的一些处理,所以对于一些惯性滑动的操作处理就可以优先考虑使用这个类,可以处理的点可以归纳为以下三点:可以监听到滑动时手指抬起的那一刻;指定手指抬起后RecyclerView惯性滑动的item个数;滑动结束后指定item在界面所显示的位置;SnapHelper用到的关键类说...原创 2019-04-18 17:06:09 · 3677 阅读 · 0 评论 -
RecyclerView(六):ItemTouchHelper如何实现拖拽和侧滑删除
概述对于RecyclerView子项的滑动或是对item进行装饰前面都已经提到过了,现在就来说说对item的拖拽进行排序和侧滑删除该如何实现,对于这样的功能,RecyclerView是没有直接给我们提供api的,不过提供了工具类方便我们使用,这个类就是这里要说的ItemTouchHelper,这个类已经为我们处理好了相对应的动画效果,但是对应的数据处理就需要我们自己来做,所以,对于这个类的理解和...原创 2019-04-23 14:37:04 · 418 阅读 · 0 评论 -
RecyclerView(四):ItemDecoration的方法说明和实现原理
ItemDecoration是对item进行装饰的一个抽象类,只要实现它对应的方法就可以实现对应的功能,先来看下这个类:…public abstract static class ItemDecoration {// 在onDraw()方法中被调用到public void onDraw(Canvas c, RecyclerView parent, State state) {onDraw...原创 2019-04-09 16:40:44 · 907 阅读 · 0 评论 -
RecyclerView(三):LayoutManager职责及相关方法
概述在RecyclerView之前,对于线性布局和网格布局用的基本上是ListView和GridView,到RecyclerView,就不需要这么麻烦了,RecyclerView对于职责划分的很明确,布局相关的就只需要LayoutManager,继承LayoutManager就可以实现你想要的布局,比如android为我们提供的一下几个布局:线性布局:LinearLayoutManager...原创 2019-04-09 11:26:24 · 1695 阅读 · 0 评论 -
RecyclerView(二):缓存实现原理
概述在说缓存之前,有必要先来了解下RecyclerView的几个内部类:Adapter:负责准备数据;负责创建View;负责将数据绑定到View;ViewHolder:对View进行包装,里面包含了View的一些状态,比如View所处的位置、View的类型(getItemViewType()返回的)、是有需要重新绑定(绑定时会调用到Adapter的onBindViewHolde...原创 2019-04-02 10:38:06 · 1174 阅读 · 1 评论 -
Android进程间通信之ContentProvider
UriMatcher: 当我们在使用ContentProvide进行进程间通信时,那我们就必然会用到UriMatcher这个类,这个类的功能可以这样去理解,就是一段字符串与一个数值对应起来,只不过这段字符串是分段存储的,比如"path/csdn",那么在存的时候会先“/”对这个字符串进行分割然后在存起来,先来一段代码:private static final Stri...原创 2018-05-18 16:21:47 · 578 阅读 · 0 评论 -
Android混淆配置
项目到了快发布的时候,我们必然会对项目打包进行混淆,这样做可以提高别人对我们项目反编译的难度,其实Android的混淆在Android studio中已经帮我们做了一些基本的配置,看了网上了一些讲关于混淆的,都说在android sdk 目录下 \sdk\tools\proguard\proguard-android.txt 下提供了默认的混淆配置,我们打开这个文件查看,发现开头有...原创 2018-05-16 14:52:29 · 1998 阅读 · 0 评论 -
TextView实现自动上下滚动的效果(TextSwitcher)
对于TextView这个控件使我们在熟悉不过的了,但是有时候可能会有这样的需求: 1、假如有10个文本内容,这些文本内容需要每隔几秒钟显示下一个; 2、文本内容切换的时候需要有动画过渡效果,比如滚动效果,新的文字从下面进入,并从透明逐渐过渡到不透明,旧的文字从上面出去,并从不透明逐渐过渡到全透明。 上面就是我们要实现的效果,...原创 2018-05-23 19:13:01 · 3632 阅读 · 0 评论 -
自动维护一个Activity栈管理
对于Android来说,本身是有activity的栈管理的,对于大部分的需求也是可以通过启动模式解决的,但是有一些时候还是需要我们自己去维护一个activity的栈管理来实现我们的需求,比如: 1、要获取单前的activity是哪一个; 2、关闭指定的activity; 3、关闭所有activity等;而且是在开发的比较后期的时候发现这样的...原创 2018-06-15 16:37:03 · 1689 阅读 · 2 评论 -
AndroidVideoCache简单使用及源码分析
对于视频播放,如果需要用到缓存,AndroidVideoCach是一个不错的选择,该项目地址: https://github.com/danikula/AndroidVideoCache 优缺点: 优点:1、使用简单,支持设置缓存视频的大小或个数; 2、支持断点缓存(一段视频缓存一部分后,退出关闭视频后,...原创 2018-07-06 20:00:58 · 5575 阅读 · 12 评论 -
Android邮件发送实现
这里邮件的实现方式使用的是 JavaMail for Andorid,用到的包主要有android-mail和android-activation,具体详情可以参考:https://javaee.github.io/javamail/#JavaMail_for_Android,这里使用的Android studio进行开发,首先是进行配置:repositories { jcente...原创 2018-07-27 17:06:48 · 23290 阅读 · 11 评论 -
Android使用Itext生成pdf文件
对于生成pdf文件,上一篇文章介绍了使用android原生的方式生成pdf,使用android原生的方式对于将view上的内容生成pdf非常的简单,但有缺憾,就是生成的pdf文佳很多,对于在项目中需要将生成的pdf文件发送出去,这时就会发现发送的时间有点长了,这对于用户来说肯定是不可以接受的了,所以就有了这里接受的Itext了。对于Itext,主要有两个版本,一个是5.x,另一个是7.x,这两...原创 2018-08-09 17:40:33 · 9692 阅读 · 12 评论 -
Android生成pdf文件之PdfDocument及踩过的坑
有时候项目中可能会遇到这样的需求,如何将android中界面显示的内容生成pdf,这里讲述的是使用android原生的PdfDocument,并没有使用框架,其一是使用起来非常的简单,但是也会也到一些坑,下面将一一道来。首先,先来说下这个类的使用,使用非常的简单,直接参考官方文档或是在源码中都能查看到简单的实例,这里就先看下源码中介绍的简单使用: * // create a new do...原创 2018-08-08 11:05:18 · 14381 阅读 · 3 评论 -
android WebView使用详解及各种设置说明
对于现在的App来说,内嵌一些web网页是比较常见的了,如果只是简单的使用,那是很简单的,直接使用webview加载url就可以了,但是有时还是会涉及到各种不同的需求,这时就要求我们去设置一些参数以及会做不同的处理。这里会从四个方面来说:1、WebView的简单使用;2、WebView使用WebSettings的各种设置;3、WebView使用WebViewClient各种方法的作...原创 2018-08-24 14:20:28 · 7951 阅读 · 0 评论 -
Android studio导出hprof到MAT工具流程
准备MAT工具:工具地址 : https://www.eclipse.org/mat/这里有两种方式:一是以插件的方式集合到eclipse中,二是直接下载MemoryAnalyzer(免安装);Android studio生成hprof文件:对于生成hprof文件,Android studio 3.0之后的版本和3.0之前的版本可以说是完全不一样的,如果你使用过eclipse开发过...原创 2018-10-11 19:07:41 · 10435 阅读 · 0 评论 -
Android studio结合MAT分析hprof文件
对于Android性能优化,其中很重要一块就是内存优化,内存优化主要还是解决内存泄漏问题,我一般分为三步进行排查:1、使用LeakCanary进行初步排查;2、使用Android studio自带的Android Profiler分析;3、使用MemoryAnalyzer(MAT)分析;对于这三步,如果对内存消耗这块没有严格要求,一般使用LeakCarary就可以了。如果对内存...原创 2018-10-16 10:49:27 · 8493 阅读 · 2 评论 -
android架构组件之ViewModel
ViewModel所解决的问题 对于当前的界面,可能由于配置、旋转或是其他的原因导致当前的界面异常销毁,当出现这种情况时,界面恢复时也同时需要恢复一些数据,之前的做法就是利用onSaveInstanceState()在异常销毁时将数据保存起来,然后在页面重新启动时通过onRestoreInstanceState()对数据进行恢复,这种做法通常是对于一些简单的数据进行保存。现假如当前界...原创 2019-03-08 17:07:36 · 1159 阅读 · 0 评论 -
RecyclerView(一):预取机制
什么是预取预取就是界面没有展示出来的元素,是下一个即将要展示出来的元素,比如界面展示的是10条目,那么当你滑动的时候,那么即将展示的将是第十一个(还没显示出来),这时候RecyclerView就会提前将需要展示的第一个元素缓存到mCachedViews中(RecyclerView四级缓存中的第二级缓存,后面会单独提取一篇将他的缓存),mCachedViews中缓存的view是不要重新绑定的,也就...原创 2019-03-25 17:04:37 · 4713 阅读 · 0 评论 -
Android之Bitmap深入理解(BitmapFactory)二
上一遍我们介绍了Bitmap,这一篇我们准备来讲一讲BitmapFactory,BitmapFactory主要还是服务于Bitmap,所以这一篇还是归结到Bitmap,这样也有利于我们理解Bitmap。 BitmapFactory是一个创建Bitmap的工具类,为我们提供了从文件、流、byte数组中创建数组,在创建的时候,还为我们提供了一个内部类Options作为参数...原创 2018-05-11 10:57:50 · 5001 阅读 · 0 评论