
Android
文章平均质量分 54
Alrey_
这个作者很懒,什么都没留下…
展开
-
Handler源码阅读随笔
Handler源码阅读随笔1.Handler的创建在App启动的时候,在ActivityThread的main方法里,会为主线程会调用Loop.paper方法,该方法会在TLS里创建并保存一个Loop对象,而在创建Loop对象时,会在Loop的构造方法里创建一个MessageQueue,最后会调用Loop.loop方法来开启循环。2.Loop是如何保证线程唯一的在Loop的paper方法中创建Loop对象时,会将创建的对象保存在ThreadLocal中,ThreadLocal内部是一个Hash原创 2022-04-22 20:39:19 · 2151 阅读 · 0 评论 -
Android Canvas不规则矩形的绘制(两条折线所围成的矩形)
先把代码贴出来,后面有时间再进行分析;涉及的主要函数Path.computeBounds():测量线段所占用的最小矩形空间与位置Path.op():两个Path之间的运算,主要作用是用一些简单的图形通过一些规则合成一些相对比较复杂,或难以直接得到的图形;参考资料:https://www.gcssloop.com/customview/Path_Over.html效果:代码:package com.alrey.customview;import android.content.Contex原创 2022-03-24 14:47:39 · 1365 阅读 · 0 评论 -
Kotlin-SharedPreferences工具类
使用到SharedPreferences、Gson、内联函数、泛型、reified.implementation “com.google.code.gson:gson:$google_gson” google_gson = 2.8.5object SpHelper { val sp: SharedPreferences by lazy { ContextUtil.getAppContext().getSharedPreferences("default", Context.原创 2021-06-07 11:34:59 · 965 阅读 · 1 评论 -
Kotlin-自定义ActionBar
第一步:替换app主题<application ... android:theme="@style/AppTheme"> <activity> ... </activity></application>单独设置某个activity的不显示actionBar<activity android:name=".view.activity.MainActi原创 2021-06-01 16:41:24 · 633 阅读 · 1 评论 -
LiveData+ViewModel+Kotlin:多页面监听同一个状态
假设在BaseViewModel中的属性isLogin需要在多个fragment和activity中监听现在有SettingFragment、MainActivity和与之对应的SettingFragmentViewModel、MainActivityViewModel,和BaseViewModel,BaseViewModel是SettingFragmentViewModel和MainActivityViewModel的父类open class BaseViewModel:ViewModel() {.原创 2021-05-28 14:17:58 · 1449 阅读 · 1 评论 -
RxKotlin(RxJava或RxAndroid) + Retrofit示例
RxKotlin(RxJava或RxAndroid) + Retrofit示例第一步添加依赖implementation 'io.reactivex.rxjava2:rxkotlin:2.1.0'//必选implementation 'com.squareup.retrofit2:retrofit:2.5.0'//必选implementation "com.squareup.okhttp3:logging-interceptor:3.11.0"//可选-用于打印http请求日志implemen原创 2021-05-19 15:27:44 · 321 阅读 · 0 评论 -
Android Recyclerview设置Item之间的间距-最简单的方案
不需要LinearLayout.LayoutParams!不需要RecyclerView.ItemDecoration!假设:要在recycleView的每条item的上下各加一个8dp的边距:第一步:在每个item的布局的根布局加上paddingTop。<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/r原创 2021-04-15 16:36:03 · 11991 阅读 · 1 评论 -
自定义LengthFilter实现对EditText长度的限制和监听
为简化同时对EditText的长度限制和长度监听的代码,同时避免部分机型上TextWatcher的兼容问题,而产生此解决方案import android.text.InputFilter;import android.text.Spanned;public class WattLengthFilter implements InputFilter { private final int mMax; private LengthWatch mLengthWatch; pu.原创 2021-04-12 16:45:40 · 627 阅读 · 0 评论 -
Android 新拟态UI (Neumorphism)
前言本文转自github,只是进行了图片的处理和部分翻译,以方便查阅截至首次发文前找到的原作者的文章地址-May,17,2020若找到本文章更新的时间节点,请私信我更新。原作者github地址文末附源码下载地址,免费。Android上的拟态化UI This is the experimental codes to build Neumorphism designs in Android. Not a library. Just sample project now(目前只是示例项目).翻译 2021-02-23 09:20:55 · 2428 阅读 · 4 评论 -
Android截屏工具类的使用
Android截屏工具类的使用此截屏工具采用MediaProjectionManager类实现帧截图,截屏的结果会包含状态栏和底部虚拟按键,涉及到以下三个工具CaptureUtil:主要负责截屏ImageUtil:主要负责对截屏后的Bitmap的处理ScreenUtil:主要负责截图前屏幕参数的初始化import android.annotation.SuppressLint;import android.app.Dialog;import android.content.Contex原创 2021-02-01 15:28:10 · 550 阅读 · 0 评论 -
Android添加Https自签名证书(Retrofit 2.x、OkHttp 3.x、Glide 4.x)
一.获取证书假设app要请求的网址是https://192.168.1.6:8080,在Chrome浏览器中输入网址会显示证书不安全从浏览器中到处证书点击证书后出现如下窗口点击复制文件,然后下一步到选择好格式后点下一步,选择路径,后缀可以为.crt或.cer后面就是下一步,然后完成然后就可以在选择的导出路径处看到从浏览器中导出的https自签名证书二.导入证书到项目中将获取的证书放到app目录下的res/raw文件中三.向OkHttp添加证书在创建httpClient的原创 2020-11-06 18:14:09 · 1506 阅读 · 0 评论 -
解决HostnameVerifier警告
前言今天邮箱收到一封官方的邮件,关键内容如下一个HostnameVerifier警告,说限期不修复就会下架Help Center解决方案如果你和我一样不知道HostnameVerifier是个什么东西,且确认自己没有用过这玩意儿,且项目里也没有这个东西(建议全局搜索一下HostnameVerifier),那么就能确定这个警告肯定是由于第三方库所引发的,这就需要你到你谷歌应用控制台去看看警告的详情信息(一般会在提醒列表里),google一般会告诉你是那个类触发了这个警告查看谷歌控制台后,看到了如原创 2020-09-24 17:06:50 · 5635 阅读 · 0 评论 -
解决DialogFragment闪烁或者闪屏的问题
今天修复一个历史遗留BUG;项目中的dialog基本都是通过DialogFragment来实现的,但是同时也有个问题,比如再加载网页的时候,加载之前xshow出个dialog,网页加载完后dismiss,但是如果网络很好,网页加载的速度很快,不到1s就加载完成的话,就会出现一个问题,界面会闪一下,如果你的Activity的主题是默认的话,就表现为黑屏一下,如果是透明的主题,就表现为可以看到上一个页面,然后立马恢复虽然这个闪屏的时间很短,估计只有几ms,但是看着还是很不爽的。最开始的解决方案是想办法设置一原创 2020-09-14 14:20:42 · 5646 阅读 · 0 评论 -
Android 5.0+应用内多语言切换失效,asset资源切换失效,bundle包多语言失效
今天在开发完app后打算在Android5.0(api22)的模拟器上面好好测试以下,结果已测试就测出了问题,软件首次启动一切正常,能正确读取到系统语言,也能在应用内切换语言,但是后面无论启动多少次都是系统默认语言,举个例子,系统语言是英文的,首次启动后在应用内把应用语言切换到中文,到此为止一切正常,但是把软件清掉重启,语言就会变成英语。先把现象说出来,慢慢分析以下:UI现象:第二次启动后,无论上一次的语言设置为什么语言,都会变成系统语言,但是加载的assets目录下的资源文件未受影响,但是在应用内切换原创 2021-03-05 16:30:01 · 1136 阅读 · 0 评论 -
Android集成HMS推送(同时集成阿里云辅助通道)的问题
问题场景按照HMS官方文档集成,单独的demo可以运行,再现有项目上把原来阿里云集成的hms单独集成出来,因为再国外的时候,阿里云获取token会失败,但是单独集成hms是可以再海外使用的,把阿里云的hms单独集成处理后,控制台能打印出token,但是再hms的后台推送通知和消息都接收不到,获取hms的SDK的日志显示通知已经推送到了手机,可能原因阿里云自带的hms没有剔除干净,导致自己重新集成的hms首先初始化,然后阿里云里集成的hms会再初始化一次,但是获取的token失效,通过和华为的官方技术人原创 2020-06-16 14:52:24 · 729 阅读 · 0 评论 -
MIUI小米集成FCM官方移动推送之接收通知问题
前提:APP在前台或者后台(国内的Android系统杀死应用是收不到通知的,系统丝毫不留情面,除非集成系统厂家自己的sdk),已科学上网且网页能正常访问google问题场景:在小米8(MIUI 11)集成了FCM推送,能初始化成功,firebase无报错(可以在控制台过滤firebase看一下有没有报错信息),能够获得google token,在FireBase的网页端控制台下发通知也无任务异常情况,但是手机收不到任何通知,或者有时候能收到通知,但是测着测着就又收不到了,又或者一段时间不继续发通知就收原创 2020-06-13 11:18:39 · 8457 阅读 · 1 评论 -
app在MAC和Win系统的Android Studio(AS)采用同种方式打包APK的包体积巨大差异的问题
问题场景:在mac和win系统的Android studio(下文简称AS)上进行apk的打包,采用build下的默认打包方式,产生的包体积差异巨大,甚至有2倍的差距。可能的原因:其他分支提交代码的时候,提交了debug库,也可能是没有strip过的release包,里面包含了很多调试信息,如果在mac上打包,AS可能默认包含了strip过程,但是在win平台上可能没有包含strip过程。strip:是在linux/unix平台下,gcc/clang/llvm等编辑工具包中的一个工具,例如命令 s原创 2020-06-12 15:48:57 · 1323 阅读 · 0 评论 -
RecycleView自定义悬浮头部及背景色差问题
RecycleView自定义悬浮头部1.如何使用自定义布局文件来实现悬浮头部2.悬浮头部背景色差问题先简单说一下我的问题场景:使用RecycleView的ItemDecoration引用自定义布局文件来实现悬浮头部,但是悬浮头部的背景色(在布局文件中直接设置的background)会出现色差,具体表现为设置的16位颜色值与界面上显示的颜色值不一样(如红的不够,蓝灰色又偏黑等等真机颜色与设计图颜色严重不符)1.如何使用自定义布局文件来实现悬浮头部private int mGroupHeight = 48原创 2021-05-17 18:07:16 · 318 阅读 · 0 评论 -
2020年Android应届生秋招技术面试题补充(飞猪、阿里云、小米、有赞)
1.如何定义心跳包的间隔时间并不是一个固定的值,需要根据网络环境来选择,网络状态好的时候可以定为30s一次,当网络状态不好的时候,断线比较频繁的时候就可以定为5s一次2.view的事件分发机制https://www.jianshu.com/p/7d50a6b0b6af本质上是对motionEvent的传递,motionEvent的传递顺序如下:Activity、winow、decorv...原创 2020-09-24 14:52:25 · 607 阅读 · 0 评论 -
TextView超链接文本样式去掉下划线和修改颜色
1.新建ComponentClickableSpan类重写ClickableSpanpublic class ComponentClickableSpan extends ClickableSpan { private Context context; public ComponentClickableSpan(Context context){ this.co...原创 2019-07-03 00:15:45 · 938 阅读 · 0 评论