自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Big_Sweet

我爱学习学习使我快乐

  • 博客(69)
  • 资源 (24)
  • 问答 (1)
  • 收藏
  • 关注

原创 retrofit+okhttp源码流程

初始化如下Retrofit.Builder rBuilder = new Retrofit.Builder().client(okHttpClientBuilder.build()) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .ba

2021-06-30 17:17:16 99 2

原创 robust原理解析

robust原理解析接上一篇robust使用打基础包的时候,每个类都会被添加public static ChangeQuickRedirect u;静态成员变量查看这个类的源码发现这个是一个接口public interface ChangeQuickRedirect { Object accessDispatch(String methodName, Object[] paramArrayOfObject); boolean isSupport(String methodNam

2021-04-27 15:48:40 1957

原创 leakcanary2.6源码分析

本文基于debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.6'版本分析导入后不需要初始化直接使用通过ContentProvider机制自定义了一个AppWatcherInstaller<application> <provider android:name="leakcanary.internal.AppWatcherInstaller$MainProce

2021-03-15 14:35:24 241

原创 glide 4.10+源码主流程分析

本文章基于glide4.11.0源码分析主流程主流程代码为 Glide.with(activity).load(url).into(target).with方法 @NonNull public static RequestManager with(@NonNull FragmentActivity activity) { return getRetriever(activity).get(activity); }get方法 @NonNullpublic RequestMana

2021-03-08 15:14:39 157

原创 eventbus流程源码跟踪

eventbus是一个很常见的android库,平时开发用的也比较多但是会用和了解它的原理是不一样的,今天主要通过正常的一条eventbus流程,来分析一下它的内部实现首先还是看一下基本用法在oncrate或者onresume注册 根据需求在不同的地方注册EventBus.getDefault().register(this)对应的在相应的ondestory onstop中取消注册E...

2019-09-18 14:22:44 235

原创 okhttp3源码解析

基本用法介绍okhttp一直是一个应用非常广泛的网络框架。 首先看一下okhttp的基本用法 var client = OkHttpClient() var request = Request.Builder().url(&amp;quot;http://www.baidu.com&amp;quot;).get().build() var call = client.newCa...

2018-07-12 10:51:29 237

原创 tinker热修复gradle接入

今天研究了一天的热修复,热修复,简单的来讲就是在不需要发包的情况下,修改你线上应用的bug,接入使用后对于我这种小白来说还是很神奇的,同时也考虑了一下,要不要接入我们的项目中,这样就不用因为一个小BUG而去再次发包了,不过,就算要接入项目中,也还有很多坑需要踩,tinker有俩种接入方式,一种命令行接入,一种是gradle接入,本篇只讲gradle接入,下篇我在补充命令行,主要用于自己做个记录,把踩

2017-03-13 17:43:41 6591 15

原创 仿高德地图首页效果,简单代码实现

2021/11/10日高德的首页效果是这样的然后我的效果关键代码 behavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onStateChanged(bottomSheet: View, newState: Int) { //3 STATE_EXPANDED 4 STATE_COLLAPSED 5 S

2021-11-10 14:28:17 1303

原创 flutter知识

flutter知识几乎所有的ui和功能都是widgetflutter是单线程程序入口为void main() { runApp(myApp1());}class MyApp3 extends StatelessWidget需要添加padding可以使用ContainerWidget titleSection = new Container( padding: const EdgeInsets.all(32.0)布局分为行和列横向布局用Row垂直布局用Columnn

2021-10-24 10:16:16 3594

原创 jetpack之navigation

navigation基本用法如下定义基础跳转fragmentNavHostFragment在首页的layout中如我的首页是homefragment <fragment android:id="@+id/my_nav_host_fragment" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_

2021-07-14 16:36:20 165

原创 jetppack之lifecycle

lifecycle通过lifecycleOwner.getLifecycle().addObserver(this)给presenter添加lifecycle,fragment和activity默认实现了lifecycleowner,在presenter里面注解@OnLifecycleEvent,当生命周期变化后就会回调这个对应的方法原理android 9.0ComponentActivity默认实现了LifecycleOwner,lifecycle的一个接口类,在oncreate的时候生成了一个re

2021-07-12 14:41:39 128

原创 jetpack之viewmodel

viewmodelviewmodel一般和livedata结合使用,viewmodel是一个可以感知fragment生命周期的,用来做数据存储的一个库解决网络请求,异步操作带来的内存泄漏问题,fragment传递数据不方便的问题,解决屏幕旋转导致的数据销毁问题。原理解析ViewModelProviders.of方法创建AndroidViewModelFactory,ViewModelStore根据这俩个参数创建ViewModelProvider,在调用get方法获取viewmodel实例@Non

2021-07-12 14:40:26 124

原创 jetpack之pagging

paging分页库基本使用方式1,创建数据源(网络,数据库,本地测试)class StudentDataSource : PositionalDataSource<Student>() { override fun loadInitial(params: LoadInitialParams, callback: LoadInitialCallback<Student>) { callback.onResult(getStudents(0, PAGE_S

2021-07-12 14:32:52 232

原创 jetpack之livedata

livedata观察者模式构建的一个和生命周期有关系的一个库,可以减少内存泄漏,保证UI状态和数据的统一,不需要手动处理生命周期的变化一般用到的都是LifecycleBoundObserver,他有一个statechange方法,当生命周期变化后,会通知livedata去更新数据,如果生命周期大于start,就会回调onchange方法,生命周期结束,会移除这个mObserver相关代码如下livedata添加监听的时候会生成一个LifecycleBoundObserver他继承了Lifecycle

2021-07-12 14:32:18 68

原创 jectpack之room

room数据库使用roombase@Database( entities = [Repo::class, RemoteKeys::class], version = 1, exportSchema = false)abstract class RepoDatabase : RoomDatabase() { abstract fun reposDao(): RepoDao abstract fun remoteKeysDao(): RemoteKeysDao

2021-07-12 14:31:33 291

原创 tinker dex文件修复简单流程跟踪

上篇文章写了tinker的使用方法tinker使用本篇文章简单的分析一下dex文件的修复流程在几年前我对热修复的理解为新apk和旧的apk通过dexbiff算法对比生成差异包,差异包通过比对文件的MD5值,把修改过的文件打进差异包,差异包下发到服务器,下载到手机指定的路径,通过这个下载的路径生成dexclassloader,获取dexclassloader中的的pathlist,在获取Element数组,然后获取系统的pathclassloader和他的element数组,把这个差异包的Eleme

2021-04-30 10:50:47 372

原创 美团robust使用

最近在整理各个热修复的使用方法和原理,第一个研究的是美团的robustgithub地址为robust基本的使用方法其实github上面有,但是我发现我集成花费了一天的时间,还有是有很多坑的所以才写了这篇文章记录一下首先是APP目录的build里面增加我红色箭头标记的带箭头的就是新增的出了增加美团的热修复包外,还增加了权限库和分包库multidexapply plugin: 'com.android.application'//制作补丁时将这个打开,auto-patch-plugin紧跟着co

2021-04-26 11:12:11 3837 6

原创 binservice之binder机制流程分析

binder机制系统中很多机制都涉及到binder机制,所以对binder机制有一个大致的了解是必不可少的。本文从bindService方法出发流程分析为bindService->connection的onServiceConnected触发来了解一下binder机制 private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceCo

2021-04-20 16:09:25 359

原创 android搭建maven仓库

首先下载maven仓库软件链接: 下载地址下载完成后解压到某一个目录然后进入目录 启动然后进入本地地址http://localhost:8081/进入仓库输入账号密码初始密码在sonatype-work文件夹下面进入后界面长这样接下来就可以开始新建lib了,打开android studio 新建一个项目,新建一个lib在gradle.properties里面配置相关信息android.useAndroidX=true# Automatically convert third-pa

2021-03-30 14:16:07 3113

原创 ide插件开发 android studio mvp插件

首先放几个坑前面俩个是在别的链接中看到的地址1, idea 开发插件的时候,src 下需要创建包名。不要直接在src 创建文件。否则也会出现 AndroidStudio 插件无效的问题2, JDK版本问题,在此前,尝试用 IDEA 默认的jdk (11),发现运行在AndroidStudio 无效,IDEA 上可以使用。需要切换为 JDK8版本,AndroidStudio、IDEA都可以运行。3,android studio版本需要和ide插件的build版本匹配否则会出现这个图andr

2021-03-25 18:24:55 120

原创 jetpack之workManager官方文档解析

基础介绍workmanager是一个可延期的后台异步任务,可以用来取代以前的android后台调度任务通俗的讲就是可以用来做后台异步任务,那他有什么优势呢,和以前的后台api方法相比有什么区别呢?带着这俩个问题开始往下看兼容性首先workmanager兼容性很好,包括 FirebaseJobDispatcher、GcmNetworkManager 和 JobScheduler都可以替换成workmanager,同时支持 API 级别 14,对电量续航也做了优化(省电)基础功能创建方式:通过单

2020-10-10 15:18:18 2434

原创 mac搭建nginx

首先新建一个文件夹进入文件夹目录下载wget http://nginx.org/download/nginx-1.15.3.tar.gz解压tar xvf nginx-1.15.3.tar.gz下载nginx rtmp模块wget https://codeload.github.com/arut/nginx-rtmp-module/tar.gz/v1.2.1解压tar xvf ...

2020-04-06 13:42:31 599

原创 热修复,插件化基础之classloader

java的classloader类的加载过程##android的classloaderbootclassloader:主要用来加载android framwork层的字节码文件pathclassloader :加载已经安装的apk的class文件dexclassloader:用来加载指定目录的字节码文件basedexclassload:父类##双亲代理模型加载class之前,会...

2020-03-09 17:54:50 205

原创 插件化,热修复基础之class文件,dex文件

class文件基本概念:class文件,能被jvm识别,加载并执行的文件格式。一种8位字节的二进制流文件生成方式:1,ide自动build2,javac命令生成class文件执行方式:java命令执行class文件class文件结构加密,最小版本,最大版本,常量池,常量结构体,作用域,this标志,super标志,接口数量,接口,成员变量,成员变量结构体,方法数量,方法,属性数量,属...

2020-03-09 15:20:03 205

原创 插件化,热修复基础之虚拟机

###java虚拟机 jvmjvm整体结构##jvm内存空间java 栈区 它存放的是java方法执行时的所有的数据栈帧 一个栈帧代表一个方法 每个方法的调用就是一个栈帧在虚拟机栈中入栈和出栈本地方法栈:专门为nativie方法服务,也是通过栈帧调用方法区,存储被虚拟机加载的类信息,常量,静态变量等数据。java堆:所有通过new创建的对象的内存都在堆中分配,是虚拟机中最大的一块内...

2020-03-09 14:38:06 176

原创 APP性能优化之-APK瘦身

简单分享APP性能优化之-APK瘦身lib包优化armeabi-v7a,x86 // so库可以只用armeabi-v7a minSdkVersion:21 android 5.0 对比图font文件查询了很多资料,暂时没有好办法,font文件缩减的本质是删除位图,删除无关字形(比如日语韩语),删除字形名称,创建字形的子集,使用后发生大小没有什么变化打包优化shrinkResources...

2019-10-14 14:28:56 186 4

原创 Viewpager2实现类似抖音的主界面

##背景一般上下滑动的全屏界面,都是使用viewpager做。好处是系统封装好了,可以直接调用相应的api就能使用坏处是viewpager的刷新机制比较麻烦,而且往头部添加数据也不是很方便后来有人使用RecyclerView+PagerSnapHelper将recyclerview打造成类似viewpage的效果好处是recyclerview功能强大,能满足大部分需求坏处是这俩个搭配会...

2019-08-08 09:41:19 2730 1

原创 recyclerview+viewpager实现多分类fragment界面 仿京东分类界面

好久没写博客了,今天决定写一篇简单的功能实现热热手这是我2018年10月份在京东app录制的他们的分类界面,今天主要就是实现这样的一个分类的界面整理思路首先整理思路啊。整体界面的实现方式可能很多,但是需要尽可能的用简单的方式,比如左边的分类界面和右边的一起看的话,好像用tablayout+viewpager也可以实现?虽然说他们都是垂直的,我们平时使用的是水平的,但是应该要实现的话也不是问...

2018-10-15 15:06:21 7259 11

原创 android开发艺术探索第四章

view的工作原理DecorView和ViewRoot ViewRoot对应ViewRootImpl,他是链接windowsmanager和DecorView的枢纽 viewroot控制view的三大流程 流程如图所示 DecorView中包含一个标题栏和一个内容栏 内容栏的id为content,在setcontentview的时候设置view进去MeasureSpecMeasureS

2018-04-28 13:38:31 207

原创 android开发艺术研讨第二章简要记录

ipc,跨进程通信,android通过binder机制进行进程中的通信,在android中一个进程一般指一个应用,也可以通过在androidmanifes中指定process属性来实现多进程多进程实现很简单,但是多进程间的数据传递不简单当启动一个不同进程的activity时,application会重新执行oncreate方法,同时,不同的进程,相同的类会分配到不同的地址空间比如在

2018-04-27 14:48:10 263

原创 android开发艺术探索第一章总结

异常情况下acitivty生命周期,比如在屏幕旋转的时候 onSaveInstanceState-&gt;oncrate-&gt;onRestoreInstanceState分别执行3个方法onSaveInstanceState在onstop方法之前调用,用来保存信息。onRestoreInstanceState在onstart之后调用,用来取出信息,当此方法被调用的时候,bundle一定有值很多...

2018-03-06 18:18:37 198

原创 解决因为gradle版本不同导致打开不同的项目build无敌慢的问题

如题,相信这个问题很多人都碰到过,比如在github看到一个很不错的项目。clone下来打开,然后界面一直处于死机状态,新手玩家可能会觉得这个项目好像有问题?不给任何提示就是打不开其实这是因为你在网上cloen下来的项目gradle版本和你的不同导致,可能在你的本地没有网上项目的gradle版本,导致android studio认为这个版本是你需要下载的,然后开始帮你下载,而且android stu

2018-01-24 11:47:04 4072

原创 android 8.0 报错StartForeground Bad Notification Error 解决方法

今天升级了android8.0 并且在一个8.0的系统上运行,居然报错了 报错日志就是标题这个了 也就是使用startForeground方法开启通知的时候报错的 在android8.0后 需要给notification设置一个channelid不要问我为什么 解决方法如下//新增--------------------------------------------- String CH

2017-12-20 14:40:54 35423 15

原创 自定义view的一些方法和参数介绍之第一期path和canvas

canvas家族//设置画板的填充色(一般为整个view) canvas.drawColor(Color.YELLOW);//画圆前俩个参数为圆心的X坐标,圆心的Y坐标,第三个参数为半径//依据的坐标系原点为view的左上角初始点作为原点(图一) canvas.drawCircle(cx, cy, r, mPaint);

2017-11-02 11:20:44 258

原创 Android 的Canvas的drawArc方法参数介绍

Canvas有一个方法drawArc这是用来绘制一个圆弧的 方法名为drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)里面参数很多,今天网上搜索了一下,都说的不准确和详细,所以写个博客记录一下首先看下

2017-10-25 18:38:23 6429

原创 HashMap源码解析

源码第一篇(hashmap)简单理解篇本篇讲解hashmap的put 方法的原理和一些源码的解析下面先简单的介绍一下hashmap (hashmap包位置为import java.util.HashMap)hashmap的数据结构是数组和链表的结合 为什么会是这个结构,后面会讲到hashmap是线程不安全的 非线程安全是指多线程操作同一个对象可能会出现问题 也就是说,我新建一个对象,用100

2017-10-16 11:19:58 213

原创 andorid面试题和笔记(持续更新)(framework)

事件分发机制首先事件指的是触摸事件,首先是viewgroup的事件分发,viewgroup里面有子view,ViewGroup的相关事件有三个:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。简单的来说就是viewgroup遍历自己的子view,如果

2017-10-09 13:42:14 599

原创 values-sw<n>dp,px,dp,dpi

1,values-swdp用来做适配,表示最小宽度 最小宽度计算方法sw=160*手机宽度像素/dpidpi获得方式dpi= context.getResources().getDisplayMetrics().densityDpi比如我的vivo x7plus分辨率为1080*1920 根据上面公式得到dpi=480那么sw=160*1080/480=360dp所以会在values-sw360

2017-09-27 16:50:52 884

原创 带你实现拍照||从相册选择->裁剪->上传服务器

涉及到的知识点: 1,调用系统拍照功能,拿到图片进行裁剪,上传服务器 2,调用手机相册,拿到图片进行裁剪,上传服务器 3,拍照权限,读取写入存储卡权限的请求和处理。 4,上传服务器使用的我以前封装的retrofit2和rxjava的类有兴趣的可以看retrofit2+rxjava2封装解析 下面进入正题1,实现拍照功能首先我在主界面放了俩个按钮一个点击拍照,一个点击从相册获取,底部放置一个

2017-09-12 17:24:59 494

原创 漂亮的viewpager画廊效果

首先看下效果图和整个项目的结构 很简单的一个项目,这也是我在简书写的第一个项目,虽然简单,但是我觉得很漂亮现在开始分析代码首先看下MainActivity的代码public class MainActivity extends AppCompatActivity { private int pagerWidth; private ViewPager mViewPager;

2017-09-01 16:13:35 3809

TinkerGradleDemo.zip

新版本的tinkerdemo

2021-04-29

recyclerview+viewpager

仿京东分类的一个小功能,博客链接为https://blog.csdn.net/qq_15527709/article/details/83058431

2018-10-15

tinker热修复gradle接入

这是tinker热修复gradle接入的资源代码,博客链接为http://blog.csdn.net/qq_15527709/article/details/61921447

2017-10-12

带你实现拍照||从相册选择->裁剪->上传服务器

带你实现拍照||从相册选择->裁剪->上传服务器,现在好像不能选择0分了。。 整套逻辑实现,原文地址http://blog.csdn.net/qq_15527709/article/details/77947616

2017-09-12

漂亮的画廊viewpager

一个很漂亮的动画效果的viewpager画廊效果, 是android studio项目,直接打开build.gradle就会自动构建啦,图片也都在里面

2017-09-01

kotlin插件

android studio 2.2版本的kotlin插件,每个adnroid studio对应的kotlin插件版本不同

2017-06-08

kotlin插件包适用于android studio

这是kotlin的插件包,考虑到官网下载比较慢,所以上传到这里方便大家下载

2017-06-06

rxjava2+retrofit2

有几个需要修改的,1,baseurl 2,apiserver的url 3,data过滤的条件我写的是getcode==0,4,log日志如果是java后台,直接使用HttpLoggingInterceptor

2017-04-26

带酷炫效果的gallery

画廊效果

2017-04-24

简单封装的greendao

经过简单封装过的greendao,大家还可以继续扩展

2017-03-20

tinker命令行接入

里面包含下载好的工具和一个简单运行的demo

2017-03-14

gradle接入tinker

这是tinker热修复gradle接入的demo代码

2017-03-14

五子棋的demo

这是android studio版本的五子棋的demo,根据慕课网的课程,hyman大神课程进行的编写,自己也做个记录

2017-02-16

根据慕课网课程九宫格解锁编写的代码

这是android stuido版本的九宫格代码,根据慕课网老师的讲课编写

2017-02-09

仿微信语音聊天的简单的demo

这是android studio版本的仿微信语音聊天的一个demo,根据鸿洋大神的课程编写

2017-02-08

仿微信语音聊天的android studio版

仿微信语音聊天的android studio版

2017-02-08

获取sha1值得apk

最好安装到手机上面,安装到模拟器好像有点问题

2016-12-19

百度4.1sdk代码demo

百度4.1sdk代码demo

2016-12-15

简单的照片查看器

简单的照片查看器

2016-12-14

自定义的FragmentTabHost

重写后的FragmentTabHost不会再创建和销毁 fragment,而是hide和show fragment这样的话节省了资源同时也解决了一些隐藏的bug

2016-11-30

高仿网易新闻框架布局

高仿网页框架布局,android studio直接打开,

2016-11-29

菜鸟商城基础篇源码与图片

基础篇的菜鸟商城源码,android studio类型,走好第一步

2016-11-29

网易布局viewpager+fragment+scrollview+recycleview

直接用android studio打开这个文件 下载相对应的安卓版本 连接了网络的一个接口 recycleview的item有数据 界面还是挺美观的

2016-09-29

贪吃蛇代码

贪吃蛇java编程

2016-04-20

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除