自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 资源 (1)
  • 收藏
  • 关注

原创 RecycleView滑动状态恢复

大家第一时间可能会想到记录某个场景下,RecycleView的滑动偏移量或者记录当前停留在哪个position,当需要恢复时通过**scrollToPosition(int position)、scrollTo(int x, int y)**等方法去滚动到某个具体位置,但是这样处理可能会损失精准度。不同业务场景下使用同一个RecycleView,并且各个业务场景下数据也有差异,若想要恢复某个场景下RecycleView最后滑动停留的状态,则可用该方式去实现。

2024-02-22 10:15:39 152

原创 SimpleDraweeView圆角失效

在xml文件里通过app:roundedCornerRadius="8dp"即可实现圆角效果,但是如果我们调用的方法是SimpleDraweeView的setImageBitmap方法时发现圆角失效了。注意:在设置bitmap的时候一定要先把bitmap转换成BitmapDrawable,然后通过getHierarchy方法进行setPlaceholderImage才行。1.先在代码中设置圆角。2.设置bitmap。

2024-01-04 10:15:46 447

原创 总结安卓Preference使用过程中注意的问题

近期在做新项目中接触到了Preference,这是一种用户界面元素,用于存储和展示应用程序的各种设置和用户偏好。该控件几年前google就已经发布了只是一直没机会应用,其实用起来还是挺方便的,使用过程中遇到了几个问题在此记录下。如果在xml你通过fragment属性配置了跳转页面的话,闪退问题是混淆导致的,最好是将fragment属性指定的fragment放到同一个文件夹下,然后配置整个目录不被混淆。最后总结下自定义Preference的使用。顶部title的返回键处理。

2023-08-31 10:10:39 919

原创 安卓修改SwitchCompat色值

SwitchCompat控件色值跟系统设置的主题有关,但是主题效果不是能轻易就能改的,因为涉及到整个APP的样式。网上方案基本都是通过修改style文件来改变色值,经过多次尝试修改最终觉得单独修改控件色值比较好。主要就是根据state_checked属性分别设置打开和关闭时对应的色值。

2023-08-21 16:58:20 819 3

原创 RecycleView加载大量图片卡顿优化

RecycleView实现类似相册功能的时候,在加载大量图片的时候,快速滑动的时候能感到明显的卡顿,因此需要我们根据滑动状态去做优化。

2023-04-20 15:06:14 2095 1

原创 LeakCanary源码解析

LeakCanary、弱引用、引用队列

2022-12-22 19:04:40 694

原创 Mac环境下反编译工具的使用

安卓反编译工具的安装及使用

2022-10-20 18:50:28 3993

原创 Retrofit中的动态代理

retrofit中的动态代理

2022-10-13 11:44:52 1472

原创 Mac下安装使用mat分析hprof文件

近期研究了一下mat软件来分析hprof文件,安装期间遇到了各种各样的问题,因此做下记录,也帮助有用到的小伙伴提前避坑一、下载地址跳转下载对应的版本二、打开mat软件遇到的问题小结1.点击打开时提示Fail to create the java Virtual Machine(创建java虚拟机失败,需要在配置文件里指定jdk配置路径)首先查看本机jdk的安装目录,终端运行 /usr/libexec/java_home -V,得到类似/Library/Java/JavaVirtualMac.

2021-12-14 15:32:47 6657 2

原创 Cloneable的深拷贝与浅拷贝

一、Cloneable是啥Cloneable是java的一个接口,接口里并没有需要强制实现的方法,因此这是一个标记性接口,实现该方法的同时,还要主动去实现clone方法,否则会抛出CloneNotSupportedException异常。 // BEGIN Android-changed: Use native local helper for clone() // Checks whether cloning is allowed before calling native local

2021-10-25 20:42:38 643

原创 安卓ClickableSpan修改超链接样式

近期在做安卓富文本的时候,遇到了一个问题就是ClickableSpan用在文本上时,是有超链接样式的(蓝色字体、下划线),那么如何修改默认样式呢,话不多说上代码int color = Color.RED;ClickableSpan clickableSpan = new ClickableSpan() { //点击事件触发方法 @Override public void onClick(@NonNull View view) { .

2021-10-14 20:34:37 287

原创 安卓瘦身之ApkChecker

随着业务量的增多,APP体积会越来越大,期间会伴随着静态图的引入,同时APP中可能会存在大量的未引用的图片,或者是多张相同的图片但是命名不同,因此apkchecker很好的检测资源的引用情况,直接输出检测结果。一、资源的准备ApkChecker.jar待检测的.apk文件R.txt关于R.txt文件的获取,在Android Studio中,进行Rebuild后,切换到project视图下,如果你的gradle版本是4.0.0以下时在build/intermediates/symbols/d.

2021-09-24 19:59:49 477

原创 记一次webview无法携带cookie的问题

近期在定制rom的pad上,做安卓js交互,遇到了web端访问服务器的时候,无法携带cookie的问题。同时还存在页面dom树虽然渲染完了,但是loading弹框还一直在的问题。pad是安卓5.1.1系统,webview版本是43.0.2357.121,最后排查是webview版本太低导致的(如果面向的开发设备是非定制的,那么这种问题应该不会存在)。一、查看webview的版本先执行 adb shell 然后执行pm list packages | grep webview 查看we...

2021-04-28 17:46:26 909

原创 IntentService源码解析

近期在做启动优化的时候用到了IntentService,就是把初始化的一些功能搬到IntentService里去延迟处理,加快了启动的时间,因此记录下IntentService内部的实现原理一、IntentService有哪些特点业务逻辑在子线程执行多个任务不能并行执行,依次执行所有的任务都执行完自定停止服务,不需要手动处理二、如何使用继承IntentService,实现onHandleIntent方法,同时也要实现构造函数在清单文件注册startService 通过intent传.

2021-04-13 18:14:15 167

原创 安卓多渠道打包配置

众所周知安卓上架商店是很多的,有时候我们需要统计各个渠道的信息(不同渠道的下载量、用户活跃度等),如果每次打包都要修改一下不同的渠道标记然后分别打包的话是很浪费时间的,而且这样容易出问题,因此可以在gradle里稍加配置,做到一个打包可以输出携带不同渠道号的apk一、配置清单文件AndroidManifest.xml//在application节点里 跟activity同级//name和value可以自己定义后面会用到<meta-data android:name="CHANNEL.

2021-03-30 16:37:07 367

原创 handler源码解析

首先要知道关于handler四个重要成员Handler:负责消息的分发与处理Looper:轮子,跟handler绑定,负责从消息队列里轮询取message供handler处理MessageQueue:消息队列,负责存储handler要处理的messageMessage:顾名思义就是消息,平时用来承载事件的类别及事件内容1、一个线程里可以有几个handler,几个looper,几个MessageQueue答:一个线程里可以创建多个handler,一个looper和一个MessageQueue.

2021-03-30 10:24:57 173

原创 安卓webview报错TypeError: undefined is not a function

一、问题在安卓5.1.1系统上,webview打开某些页面白屏或者点击无响应,通过日志发现有这么一行错误"TypeError: undefined is not a function", source: file:///android_asset/dist/index.js (1)初步怀疑是安卓webview某些参数没有设置好,折腾了一段时间无果,最后发现是web端的问题二、解决方法web端的js里用到的某些es6、promise等新特性导致webview不支持,因为web端可以引入一些三方的j

2021-03-22 17:22:54 2746 1

原创 记一次AndroidAutoSize引起的ListView显示异常的bug

一、复现场景首页是任务列表,采用了SmartRefreshLayout,当我下拉刷新的时候,此时执行刷新动画,然后快速的点击到个人中心页,当我关闭个人中心页回退到首页时,发现首页的任务列表的item都变小了(有的时候会个别item显示正常,有的显示很小)二、问题分析复现场景并不是在所有设备上都能复现,个别设备上是必先的,开始怀疑是SmartRefreshLayout里嵌套的RecycleView有问题,就换成了ListView,最后还是复现了,经排查是Autozise适配导致的,出现这个问题的原因是

2021-03-17 16:27:54 735

原创 okhttp配合retrofit实现baseurl动态切换

在okhttp+retrofit+rxjava网络框架中,基本都是配置了baseurl,正常来讲一个安卓项目baseurl是固定不变的,但是在有些情况下,baseurl可能需要改变,这就需要我们在项目中动态的去修改baseurl。一、分析this.mRetrofit = new Retrofit.Builder() .baseUrl(baseUrl) .addCallAdapterFactory(RxJava2CallAdapterFa.

2020-11-24 16:53:59 1986 2

原创 okhttp和retrofit实现网络缓存

一、生活中的例子在APP的使用过程中,类似的新闻客户端,我们会发现无网络的情况下打开APP首页是显示新闻列表的,也就是说此时的数据是缓存数据,那么我们如何也实现这样的效果呢?二、分析需求有网络的情况下总是去访问服务器获取最新的数据,并把数据缓存到本地无网络的情况下直接去缓存里找数据,如果没有找到就抛出异常(我们可以捕获该异常给用户友好提示如当前没有网络连接)那么会有人疑问,难道所有的接口都是这样的流程吗,比如我有的接口就是不想缓存,无网络的情况下就是要去访问服务器,大不了抛出一个网络连接超时

2020-11-19 13:34:00 672

原创 Jetpack之Navigation回退之后页面销毁

一、出现的现象使用Navigation进行Fragment之间的跳转,在回退的时候发现之前的Fragment页面上的数据不在了,经排查发现是页面被重新执行了onCreateView,也就是说页面重新被创建了,这样的话跟之前的多Activity的体验效果就不一样了。二、分析原因其实这是google故意这么设计的,google的本意是在宿主Activity里有ViewModel,ViewModel维护着页面里的数据,Fragment每次被创建就通过ViewModel获取之前的数据。如果遇到页面是ListV

2020-11-18 14:45:28 4380 12

原创 Jetpack之Navigation学习

一、什么是NavigationNavigation是google推出的Jetpack架构组件里的一种,一个Activity内的多个Fragment由Navigation负责页面跳转并互相传值,同时能保留先前多个Activity的切换的用户体验。二、Navigation有啥优点传统的一个页面就是一个Activity,Activity是重量级的,一个Activity的创建是很复杂的,会销毁很多内存资源,Fragment就显得比较轻巧能完美的保留多个Activity跳转的效果,能轻松的实现页面间的传值

2020-11-18 13:36:53 322

原创 小程序华为手机canvas不显示问题

微信小程序在部分华为手机上,canvas画布不显示绘制内容1.先上代码,很简单就是先从网址上下载图片生成临时路径,然后把该图片绘制回来,测试用的是P30设备,现象就是啥都不显示,调试模式里log日志也没有任何错误wx.getImageInfo({ src: "http://mb-yun.oss-cn-hangzhou.aliyuncs.com/elinglishtalk/images/work_save_success.png", //网络图片路径 success: res => { .

2020-08-10 16:24:47 3184

原创 java里的File.createNewFile遇到的坑

需求:将bitmap保存到sdcard,遇到的问题保存失败因为是别人的项目,临时帮忙给改bug,这是之前的工具类,最后抛异常了public static void savePic(Bitmap b,File imgFile) { if (b == null || imgFile == null){ return; } FileOutputStream fos; try { imgFile..

2020-06-30 16:04:52 2265

原创 小程序体验版提示页面不存在

今天一如既往的一顿操作发了一版体验版本的小程序,然后悠闲的打开掘金看点东西,突然项目经理拿着手机来告诉我,小程序提示页面不存在。。。

2020-06-23 13:50:44 4498

原创 微信小程序双重循环嵌套之角标和对象

小程序关于数据的展示会经常用到双层for循环,这就涉及到获取外循环的角标及对象、获取内循环角标及对象,开始接触的时候用起来比较混乱,在此记录下使用方法项目中部分截图一、代码解析wordlist:整个大题,里面有两个小题,每个小题有三个选项因此需要两个for循环,外层循环是显示两个小题,内层循环是显示三个选项二、用到的小程序语法其实双层for循环只需要记住两个语法基本就够了wx...

2020-04-24 17:04:45 1927

原创 Mac下Maven环境搭建(IDEA的配置)

这段时间自学过springMvc,配置过本地的maven,当时下载的3.6.5,结果idea编译项目的时候一直报错,折腾了俩小时才发现是maven版本过高,于是我最后用的是3.6.1版本下载的一、下载maven压缩包(最好不好用太新的版本,容易出现问题)maven3.6.1官网最新的网址下载完毕解压到你想放置的目录,后面会用到二、配置.bash_profile文件1.下面的操作假...

2020-04-14 16:30:41 616

原创 微信小程序授权登录

一、用的的两个方法1.通过login获取用户凭证codewx.login({ success (res) { let code = res.code } else { console.log('登录失败!' + res.errMsg) } }})2.通过getUserInfo获取用户信息getUserInfo: function (e) { ...

2020-04-02 16:37:59 666

原创 微信小程序的scroll-view不能滚动问题

最近搞了一个多周的微信小程序算是入门了吧,因为之前自学过js和css,所以上手比较快,语法跟VUE挺像的,下面说说期间遇到的一些问题吧。一、scroll-view没有显示全,但是不能滚动确定你想实现的滑动方向,检查一下scroll-x或者scroll-y有没有写(scroll-x:true 支持横向滑动 scroll-y:true 支持竖向滑动)检查一下是不是没有给scroll-vie...

2020-03-23 10:11:01 14202 1

原创 安卓V1、V1+V2签名

最近做跟华为对接定制rom的事情,涉及到了签名问题,以前都是开发工具直接打出签名包,基本没怎么用命令行的形式进行签名,所以这次记录下,方便后期再遇到。注意:对apk签名时,当前命令行所在的目录就是apk所在的目录(cd apk目录)一、V1签名直接在命令行输入jarsigner -verbose -keystore 111 -signedjar 222 333 444111:你的签...

2020-03-09 11:16:14 4186 2

原创 记一次安卓RSA接口加密

近期新项目接口联调,后端登录接口接收的密码,要求RSA非对称加密,也就是安卓使用公钥加密,后端使用私钥解密,期间遇到了各种坑。踩坑:因为安卓也是基于java写的嘛,所以后端把加密的工具类发我了,里面用到了apache的Base64,所以我在网上下载了"commons-codec-1.11.jar"包,在用之前搜了搜发现不能直接用,需要改下包名等操作。当时参考了这篇文章,一顿操作之后,后端告...

2019-12-31 14:14:10 479

原创 Mac版 IDEA 使用 MyBatis Generator自动生成代码

首先使用IDEA创建好maven工程一、配置pom.xml,添加依赖1.dependencies节点下 <!--mybatis逆向生成插件核心--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generat...

2019-12-10 15:45:58 1594

原创 SpringBoot配置扫描包范围

近期在学习java的spring框架,得知使用注解需要配置包扫描的范围,然而在SpringBoot项目中的配置文件里找不到如spring类似的配置<context:component-scan base-package=”XX.XX”/> 经查阅资料SpringBoot其实有默认的包扫描机制,启动类所在的当前包以及包的子类都会默认被扫描,所以新手在学习这个框架的时候,有时候可能因...

2019-12-10 10:11:24 11282

原创 RxJava线程调度工具类

一、引入rxjavaio.reactivex.rxjava2:rxjava:2.1.6二、创建MyObserver类public abstract class MyObserver<T> implements Observer<T> { public abstract void onSuccess(T t); public abstract vo...

2019-11-21 18:12:10 283

原创 安卓各module的依赖版本统一

在日常开发中,随着项目的迭代,工程会越来越大,module也会越来越多,每个module都有各自的gradle进行管理,可能不同的module引用了相同的三方依赖库,稍不留神会引用不同版本的库,因此我们需要版本统一。这样的好处就是一来统一了版本,二来又方便管理。一、新建一个config.gradle文件这个文件要建立在项目的根目录(和project的build.gradle同级),这个文件...

2019-11-20 18:12:36 1036

原创 安卓7.0系统以上Uri访问抛出FileUriExposedException

安卓项目中很多地方用到了相册获取、apk安装、本地文件打开等,但是在高版本(7.0以上)就会抛异常,因为需要我们单独进行处理一、原因从Android 7.0开始,不再允许在app中把file:// Uri暴露给其他app,否则应用会抛出FileUriExposedException。原因在于,Google认为使用file:// Uri存在一定的风险。二、解决方法使用FileProvid...

2019-11-15 18:09:14 233

原创 如何优雅的将现有的安卓项目打包成aar

日常开发中我们可能遇到过这种情况,就是现有的安卓项目需要打包成aar作为别的安卓项目的一个小模块,网上教程有很多,大多数都是修改清单文件,gradle然后build出aar来,如果在开发阶段bug fix的时候,可能需要频繁的改代码,因此我们可以换一种优雅的方式来处理话不多说先说步骤:一、添加标记在gradle.properties文件中加入这一行//true代表改项目是aar项目 ...

2019-11-14 15:16:43 1038

原创 安卓通知栏显示下载进度(兼容安卓8.0系统)

2019-10-25 14:59:47 1554

原创 安卓TextView通过\n换行

之前遇到过一个问题,就是后台接口返回的文本里带有的\n不起换行作用,因此需要我们加以处理if (!TextUtils.isEmpty(strName)){ if (strName.indexOf("\\n") >= 0) { String str2 = strName.replace("\\n", " \n "); ...

2019-10-15 10:22:02 865

原创 Android中应用程序清除data/data,清除缓存,兼容8.0系统

前言:最近实现了一款系统级应用中心,需要获取已安装APP的缓存大小以及清除缓存,获取缓存的在另外一篇博客总结过,获取APP缓存大小,因此这篇文章记录一下如何清除缓存。一、安卓8.0之前1.首先需要自己创建几个AIDL文件,方法在前言连接里有,这里就不再介绍。2.需要用到PackageManager里的clearApplicationUserData方法,但是改方法已被隐藏不能直接调用,因此需...

2019-09-26 14:29:09 3688 1

ApkChecker.jar

ApkChecker.jar

2021-09-24

空空如也

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

TA关注的人

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