自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 启动速度优化

android启动优化,结合自己的经验,一点自我总结

2023-01-29 10:49:03 1202 1

原创 android 媒体文件分区适配

android 媒体文件分区适配最近刚好有个需求做了媒体文件的分区适配,记录以下官方文档地址:https://developer.android.com/guide/topics/data?hl=zh-cn问题点之前的下载文件都在/storage/emulated/0/android/data/pagename/file中,首先这个属于应用内部的文件系统,而且是不需要读写权限的申请的,它会跟随应用的卸载而删除。由于Android Q文件存储机制修改成了沙盒模式,同时对应用内部的文件系统加强了访问控

2022-01-27 17:30:35 2264

原创 android 协程基础(二)

android 协程基础协程构建器launchasyncjoin组合并发协程的启动模式DEFAULTATOMICLAZYUNDISPATCHED协程构建器launch和async构建器launch返回一个Job并且不会附带任何结果值async返回一个Deferred,Deferred是一个Job,可以使用await()在一个延期的值上得到它的最终结果eg:通过await()来获取结果 GlobalScope.launch{ val job1 = launch {

2021-09-13 22:35:12 474

原创 android 协程基础(一)

android 协程基础基础概念协程挂起和恢复挂起和阻塞调度器Dispatchers.MainDispatchers.IODispatchers.Default结构化并发-CoroutineScope背景:上家公司干了三年,开发语言主要用的JAVA和flutter来开发的,新的公司全是kotlin,所以又要把上上家公司用的kotlin要回顾下了,主要还是协程和Jetpack相关。基础概念协程协程并不是一个新的概念,它并不是 Kotlin 发明的。它们已经存在了几十年,并且在 Go 等其他一些编程语言

2021-08-15 14:33:11 1103

原创 android 集成Play Install Referrer

android 集成Play Install Referrer旧版在之前集成Google广告归因是采用广播的形式,定义一个匹配INSTALL_REFERRER的广播接收器: <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver" android:enabled="true" android:exported="t

2021-07-30 16:58:40 3894

原创 studio4.2.1 gradle侧边栏没有task问题记录

studio4.2.1 gradle侧边栏没有task问题记录最新版的studio4.2.1默认将gradle侧边栏的task关闭了,来提高同步速度。可以在设置里面打开:取消勾选,就有task了。

2021-07-11 22:04:03 459

原创 转载:Android 声明性布局Compose预研

一篇在上家公司写的,预研方案,放在公司的技术账号下面了。随着kotlin的流行,Compose越来月成熟,KCP(Kotlin Compiler Plugin)和KSP(Kotlin Symbol Processing API)的未来加持下,会走的很远。Android 声明性布局Compose预研...

2021-07-11 21:58:24 117

原创 剖析Framework面试-笔记(二)

剖析Framework面试-笔记其他应用组件相关Service的启动原理Service的绑定原理使用原理UI体系相关进程通信相关线程通信相关其他应用组件相关Service的启动原理获取AMS的binder对象并发起startService的调用。其中ServiceRecord跟启动的Service是在AMS里面是对应关系的。pendingStarts是之后调用startServiceCommon的方法。r.app表示Service对应的进程,r.app.thread表示进程已经就绪。如果r

2021-07-11 19:54:04 547

原创 剖析Framework面试-笔记(一)

剖析Framework面试-笔记系统服务相关对zygote的理解作用启动流程Zygote怎么启动的进程启动之后做了什么细节与问题Zygote fork 要单线程Zygote的IPC为啥没有采用binder通信?孵化应用进程为什么不交给SystemServer来做,而专门设计一个zygote?android系统的启动android有那些主要的系统进程?这些系统进程怎么启动的?ServiceManager启动流程zygote启动流程SystemServer启动流程zygote启动部分SystemServer的部

2021-05-14 10:21:22 1013 1

原创 Recyclerview滑动对齐方式smoothScrollToPosition

Recyclerview滑动对齐方式原因遇到一个问题,就是常见的双击让Recyclerview跳到知道position,但是跳转却是到对应position的底部,而不是上面对齐。方法:smoothScrollToPosition(position)Recyclerview空实现smoothScrollToPosition,最后由对应的LayoutManager实现,这里是LinearLayoutManager @Override public void smoothScrollToPosi

2021-05-12 18:36:02 1791

原创 android Gradle插件分类与使用

android Gradle插件分类与使用简介作用与优点作用优点插件分类脚本插件对象插件内部插件第三方插件对象插件自定义插件DSLAndroid Gradle 插件分类编写与集成编写build.gradle中编写buildSrc编写独立项目编写简介Gradle 是一款非常优秀的构建系统工具,它的DSL基于Groovy实现,可以通过DSL来达到你构建的目的。其中提供了插件的概念,基于Gradle进行很好的扩展,而不改变其核心基础,又能满足不同业务的需要。这里只说android gradle 插件从Gr

2021-03-28 22:36:58 461

原创 android groovy语法与数据结构

android groovy语法与数据结构语法switchforwith数据结构listmap范围帮自己记录下语法和数据,对于android开发者而应,groovy写的机会还是比较少的,忘记了就来瞅瞅。groovy的语法与数据结构比较像python,函数比较多,比较灵活。java的语法跟groovy通用语法switch用法跟java一样,但是类型无限定:字符串、整型、数组、范围(1..5 这样的结构指范围)、类型等。def x = 1.23def result//无限制,可匹配list 某

2021-03-23 16:54:32 123

原创 android 初识SPI

android 初识SPISPI全名是Service Provide Interface官方解释:为某个接口提供服务的机制。由ServiceLoader通过加载接口类或者抽象类,再通过模块的配置文件,以此扫描获取到多个实现类的全限定名后通过反射操作获取实例来跨模块通信。官方文档:https://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html使用这里的使用仅仅对于android方向的android组件化通信可以使用SP

2021-03-22 16:56:38 458

原创 android Groovy基础语法

Groovy基础语法Groovy基础语法变量引号区别string用法闭包声明、调用、返回this owner delegate 区别和使用Groovy基础语法变量引号区别Groovy可以用单引号、双引号、三引号来表示字符串,但是各自还是有区别的。单引号内部不能引用扩展表达式,如下的 name 字段 是不能引用到的。要处理特殊字符,比如换行 、内部引号、斜杠等def name = 'test'def sex = 'name : ${name}'def age = 'arg \n 33'

2021-03-05 17:35:03 257

原创 Mac 搭建Groovy环境

Mac 搭建Groovy环境下载下载地址:https://groovy.apache.org/download.htmlmac用户可以使用brew下载,但是也比较麻烦,还是推荐直接下载zip包就好了。解压后顺便看下bin目录下的三个命令:groovy执行编译groovy编译版calss文件,相当于java 命令groovyc将groovy编译成class文件,相当于javac命令groovysh执行编译groovy脚本环境配置先copy 解压后的groovy文件下的bin目录路况

2021-03-04 11:08:55 1819 3

原创 android ViewFlipper实现跑马灯

ViewFlipper实现跑马灯实现跑马灯效果很简单,直接设置Textview的属性android:ellipsize="marquee" 就行了,然后主要焦点的抢占问题就行了,但这里是横向的跑马灯。ViewFlipper可以实现竖直方法的跑马灯效果介绍ViewFlipper可以理解成提供多个视图直接之前切换的容器。是继承了FrameLayout的容器布局,所以是可以调用addView方法去添加子视图的,然后设置子视图进入退出动画,就能达到竖直跑马灯的效果了。ViewFlipper提供了5个自定义

2021-03-01 00:03:24 699

原创 android 取消黑暗模式

取消黑暗模式在你的AndroidManifest.xml文件中,在application标签下,设置全局android:theme="xxx":<style name="BaseAppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> ... <item name="android:forceDarkAllowed" tools:targetApi="q">false</item

2021-02-03 10:13:26 2087 2

原创 记一Bug:StaggeredGridLayoutManager :java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

记一Bug:

2021-01-29 15:42:42 1708 4

原创 Glide 4.0+源码分析

Glide 4.0+源码分析写过Glide的使用和一些注意事项了,这次简单分析下Glide的加载图片流程。 GlideApp.with(context) .load(resId) .into(imageView);总体分析整体框架可以看作以下几个部分:Glide 初始化系统,负责管理系统其他模块,比如:数据加载器、网络栈等。RequestManager 创建、初始化以及管理系统所有的Request。Engine 将资源加载请

2021-01-28 17:06:18 330 1

原创 android LeakCanary原理解析

LeakCanary原理解析LeakCanary是square公司开源的一个内存泄露检测的开源库。理论理论一:引用分类:强引用:强引用还存在,垃圾收集器永远不会回收掉被引用的对象。宁愿抛出OOM异常也不会回收。软引用:(SoftReference)在JVM将要内存不足时,会进行一次GC,这次GC会回收软引用对象。内存充足时,不会回收软引用。弱引用: (WeakReference)在JVM发生GC时,无论内存是否足够,都会回收弱引用。虚引用:(PhantomReference)虚引用时极其

2021-01-13 11:17:18 473 1

原创 记ViewStub的一个问题

记ViewStub的一个问题莫名其妙线上报错,一个空指针

2021-01-04 11:02:52 151

原创 okhttp实现连接池原理

okhttp实现连接池原理为啥需要对于tcp/ip的网络请求,是短连接请求,每次理论上是需要三次握手和四次挥手的。频繁的进行建立Sokcet连接和断开Socket是非常消耗网络资源和浪费时间的。然后HTTP的keep-alive也是用来优化的连接的。普通的HTTP请求是客户端连接到服务端了,请求结束后关闭连接。流程是反复的。带keep-alive头HTTP请求,服务端接受到这个字段,在一定的时间内,会维持这次连接,这期间的请求不会再次连接,而是直接复用了。由此可见网络请求的优化是至关重要的。

2020-12-30 16:28:09 3486

原创 Glide遇到的问题与解决方法

遇到的问题在使用中遇到的问题记载。适配androidx问题遇到android.support.annotation.NonNull找不到问题由于目前新项目已经都迁移到了androidx原因,已经移除了support包了。这里需要作出以下修改:修改gradle.properties文件,添加如下:android.useAndroidX=true# Automatically convert third-party libraries to use AndroidXandroid.enab

2020-12-27 21:24:00 1569

原创 Glide4.0+使用

Glide使用以及注意点前言都2020年了,还讲Glide的使用确实很过时,而且网上文章和官方文档一大堆,不过,在使用中往往也只用到那几句话,但是遇到的实际问题确实很多。想小记一下,怕自己忘记了。使用导包 api 'com.github.bumptech.glide:glide:4.9.0' api 'com.github.bumptech.glide:disklrucache:4.9.0' api 'com.github.bumptech.glide:annotations:4

2020-12-24 09:55:47 774

原创 android RecyclerView实现柱状图

android RecyclerView实现柱状图先上效果图:思路可以把每一个柱形图看作RecyclerView的单个item,

2020-12-08 16:04:33 650

原创 OPPO崩溃问题解决

OPPO崩溃问题解决在APM上监控到一个高频cash,如下崩溃线程FinalizerWatchdogDaemonCaused by: java.util.concurrent.TimeoutException: android.content.res.AssetManager$AssetInputStream.finalize() timed out after 10 seconds at android.content.res.AssetManager$AssetInputStream.

2020-10-28 18:37:37 1553

原创 android mac搭建Nexus3.+私有maven

android 搭建Nexus3.+私有maven上次讲了搭建本地maven方法,这次说下Nexus3.+搭建方案(本地端口模拟远端)。安装篇

2020-09-21 15:29:28 387

原创 android 搭建本地maven库

android 搭建本地maven库先学习本地maven库搭建,在学习远端maven搭建。情景在大型的项目中,多人开发环境下,安全为第一条件下必然会产生以下几个问题:项目越来越大,导致项目依赖越来越多,配置项剧增,最后就是编译时间非常漫长。项目依赖的第三方库,自己拆分的库很多,不利于管理和维护。开发人员太多,项目一大坨,不利于责任的划分和管理。代码无版本控制,规范很重要。代码全部在本地,很容易产生代码泄露,很不安全。(本地maven也是如此)所以大家熟知的组件化方案就产生了,各种开源方

2020-09-14 20:09:46 1143

原创 android productFlavors多马甲打包

productFlavors多马甲打包先上官方文档,写的很不错了,地址:https://developer.android.com/studio/build/build-variants?utm_source=android-studio#product-flavors这里只是总结下用法和一些注意点。背景有时候公司需要我们打很多马甲包(改包名和名字,其他一样的)、或者对不同应用市场的渠道包(应用图标不同、启动图或者厂商的推送分开集成)等需求,就可能需要创建很多项目去单独修改,很是麻烦。但是googl

2020-09-13 18:30:48 717 1

原创 android 问题小记

小记记录下一些很少用到的小知识点设置

2020-09-07 15:05:43 116

原创 android CrashHandler处理异常

CrashHandler处理异常情景Android应用无法避免不会发生crash,可能属于系统底层的bug、或者机型适配、亦或者糟糕的网络环境。当crash发生时,系统会kill我们的应用程序,会闪退或者提升用户程序已停止运行,而且更恐怖的是,对于开发者而言,是无法知道当时用户所操作或者面临的网络环境的,也无能为力的去解决改bug。但是Android系统提供了这类问题的方法:UncaughtExceptionHandlerCrashHandler public interface Uncaugh

2020-09-03 18:15:16 857

原创 android Context家族及详解

Context家族及详解家族关系何时创建Activity对应Application对应Service对应面试点一个应用包含多少个Context个数?Application能启动一个Activity嘛?Context为何会发生泄漏,怎么解决?ContentProvider的中的Context那来的?总结Context大家太熟悉了,大家都会用。比如启动组件、获取系统服务、获取权限相关、包管理、类加载、文件管理和资源相关等功能。这里先讲讲Context的类关系:家族关系开局一张图、内容全靠编:其实Ac

2020-08-25 15:38:45 214

原创 Android OkHttp 全面详解

Android OkHttp 全面详解目前来说OkHttp已经是对于android开发人员实现网络编程的重要途径之一了。github地址这里以3.10.0的源码分析,梳理整个网络请求的流程。包的导入引入包 api 'com.squareup.okhttp3:okhttp:3.10.0'日志库:搭配更佳api 'com.squareup.okhttp3:logging-interceptor:3.10.0'上面的不够好用?来个客户端的日志更清晰的:chuck库 debugCompi

2020-08-16 15:57:52 1050

原创 android 9.0 activity启动流程分析

android启动流程分析

2020-07-20 00:43:47 575

原创 java8 String、StringBuffer、StringBuilder区别

String、StringBuffer、StringBuilder各自区别StringStringBufferStringBuilder知识扩展String特性ABStringBuffer和StringBuilder 使用考量ABString的创建机理应用场景ABC各自区别StringString 是Java语言非常基础重要的类,提供了构造和管理字符串的各种基本逻辑。他是典型的Immutable(不可变)的类,被声明成为final class,代表不能被基础,且所有的属性也都是final的。也由于它

2020-06-11 20:23:50 454

原创 android 注解使用

android中的注解使用定义Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解)是一个接口,程序可以通过反射来获取指定程序元素的 Annotion对象,然后通过 Annotion对象 来获取注解里面的元数据。常用注解@Target修饰的对象范围,表示作用的范围。可以查看ElementType了解详情。取值范围TYPE类、接口FIELD字段、枚举METHOD方法

2020-05-11 15:37:45 498

原创 android内存优化-对象池模式和享元模式

在内存优化的道路中,往往会遇到对大量使用对象的情况,为了减少内存的分配,减少垃圾回收器调用次数,合理的使用对象设计模式去设计对象,减少内存抖动的风险。对于对象的重用,主要有2中设计模式:对象池模式和享元模式对象池模式思想:为避免一个可能会被重用的对象,被垃圾回收。从而节省了创建对象所花费的时间和内存的重新分配。使用一个对象池的对象(万物皆对象)去负责管理大量可重用的对象,是重用的对象被请求在再...

2020-02-07 17:42:58 470

原创 讨论android的设备唯一码

讨论android的设备唯一码设备唯一码:是用一串字符或者号码来映射唯一的硬件设备。有啥用?统计用来统计用户行为,设置大数据标签。一般情况下都是用应用账号作为唯一码,但是只能适合部分强登录应用,对于那种非强登录的app而言,比如购物类,看房类app而言,设备唯一码是用来做大数据统计的唯一选择了。风控防止羊毛党重复注册、重复撸羊毛、恶意访问安全等问题。风控则是最需要稳定可靠的设备唯一码...

2020-01-08 17:13:16 983

原创 EventBus3.0源码分析

分析eventbus的源码,来了解其中的思想,并在平常的使用中注意点才会更清晰

2019-11-20 10:18:26 124

原创 启动优化的注意点

2019-10-11 17:30:49 139

吐司自定义

吐司自定义

2016-08-24

空空如也

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

TA关注的人

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