![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
android
文章平均质量分 64
cvKnight
这个作者很懒,什么都没留下…
展开
-
【Android】性能监控之帧率检测Tinydancer
Tinydancer的核心原理就是接收每次的绘制信号,实时计算两次绘制之间的间隔,转换成帧率。原创 2022-11-03 11:03:08 · 2342 阅读 · 1 评论 -
【Android】Animation和Gone不得不说的故事:分析动画对View的影响
提前掌握事件分发的知识,在分析Touch事件的时候有的放矢。熟悉Choreographer以及界面刷新流程,能够很快了解动画的执行过程。重在积累,有些知识可能当下看不出用途,用的时候才知道真舒服。原创 2022-10-27 14:49:03 · 1289 阅读 · 1 评论 -
【Andorid】提升性能:使用AsyncLayoutInflater异步加载布局
Google在SDK中给出了一个解决方案:AsyncLayoutInflater。原创 2022-10-08 10:31:47 · 1134 阅读 · 0 评论 -
【Android】ViewRootImpl、WindowManagerGlobal和WindowManager之间的关系
Activity创建PhoneWindowActivity设置PhoneWindow的View和WindowManagerActivity Resume时,通过WindowManager添加ViewWindowManager实际调用的WindowManagerGlobalWindowManagerGlobal创建了ViewRootImpl,并且给ViewRootImpl设置View。原创 2022-09-29 14:19:31 · 1130 阅读 · 0 评论 -
【Android】界面是如何刷新的流程
接收到更新界面请求添加回调到队列中接收到屏幕发送的同步信号,从队列中取出回调执行回调执行的方法,调用View的相关方法,更新界面。原创 2022-09-29 11:55:47 · 2060 阅读 · 0 评论 -
【Android】获取导航栏、状态栏高度
获取系统默认值原创 2022-09-20 10:37:27 · 8723 阅读 · 1 评论 -
【Android】Loader及LoaderManager的使用和源码分析
Loader和LoaderManager原创 2022-09-15 10:59:18 · 920 阅读 · 0 评论 -
【Android】日夜间模式填坑记
记录夜间模式开发原创 2022-09-07 10:14:12 · 1481 阅读 · 0 评论 -
【Android】【Gson】对象创建接口的调用流程
【Gson】对象创建接口的调用流程。原创 2022-08-16 12:05:52 · 287 阅读 · 0 评论 -
【Android】【内存优化】【减少对象创建】Android SDK对象池:Pool
内存优化原创 2022-08-15 16:23:48 · 759 阅读 · 0 评论 -
【Android】Gson的优化
过滤不需要解析的属性原创 2022-08-02 15:44:39 · 834 阅读 · 0 评论 -
【Android】TextView的性能优化:避免使用wrap_content
设置width尽量不要使用wrap_content原创 2022-08-02 15:37:21 · 1145 阅读 · 0 评论 -
【Android】获取当前进程名的四种方法及效率对比
...原创 2022-08-01 11:45:30 · 3671 阅读 · 0 评论 -
【DataBinding】更新视图的逻辑:从一个bug说起
我在项目中使用了DataBinding,但是数据并没有更新。原创 2022-07-21 15:29:03 · 334 阅读 · 0 评论 -
【Glide 】框架在内存使用方面的优化
理解源码不是最终目的,纸上得来终觉浅,绝知此事要躬行,学习优秀的代码,最重要的是掌握其中的思想,并应用到自己的项目中原创 2022-07-21 14:19:30 · 921 阅读 · 0 评论 -
【Android】判断点击位置是否在View的区域内
判断点是否在绘制区域内原创 2022-07-08 13:47:41 · 2762 阅读 · 0 评论 -
【Android】Uri和R资源相互转化
Uri转R: private static final int NAME_URI_PATH_SEGMENTS = 2; private static final int TYPE_PATH_SEGMENT_INDEX = 0; private static final int NAME_PATH_SEGMENT_INDEX = 1; // android.resource://<package_name>/<resource_id> private static原创 2022-05-28 18:28:13 · 455 阅读 · 0 评论 -
【Glide】按照数据模型获取数据
从几个接口,看Glide如何处理复杂的模型原创 2022-05-27 11:08:15 · 399 阅读 · 0 评论 -
【Retrofit】Retrofit的源码解析
接口、动态代理、方法缓存、方法解析、请求适配器、响应转换器原创 2022-05-12 17:27:53 · 684 阅读 · 0 评论 -
【Retorfit】自定义请求适配器CallAdapter.Factory
自定义适配器原创 2022-05-12 11:20:35 · 1272 阅读 · 0 评论 -
【Glide】缓存大小的计算策略
正确管理app内存原创 2022-03-29 16:04:51 · 3143 阅读 · 0 评论 -
【Android】ActivityManager的介绍
ActivityManager虽然名为Activity管理器,其实际功能比类名描述的广泛,定义的方法涵盖了内存、进程、任务、设备等相关功能。因此,将ActivityManager理解为**AppManager**,更符合这个类。原创 2022-03-29 14:13:38 · 4664 阅读 · 0 评论 -
【Android】进程级别importance
Importance该进程的相对重要级别,值越小级别越高属性值说明IMPORTANCE_FOREGROUND100进程正在运行前台ui,可直接与用户发生交互。IMPORTANCE_FOREGROUND_SERVICE125进程正在运行前台服务。例如播放音乐IMPORTANCE_VISIBLE200进程正在运行一些内容,内容不与用户交互,但是对用户可见。IMPORTANCE_PERCEPTIBLE230用户无法直接感知到的进程,但是从某种程度上,原创 2022-03-21 18:20:14 · 2839 阅读 · 0 评论 -
Cannot identify version of git executable: no response
启动Android Studio后,Git报了这个错误:Cannot identify version of git executable: no response重启了AS后,还是报错。通过AS菜单的 invalidate caches / Restart重启后,不再报错了。原创 2022-02-16 18:19:57 · 912 阅读 · 0 评论 -
【Android】Dagger:三种方式创建Component
文章目录自动生成@Component.Factory@Component.Builder自动生成如果没有在Component内部使用@Component.Factory或者@Component.Builder注解,Dagger框架会自动生成create静态方法,用来创建Component。@Componentpublic interface ApplicationGraph { UserRepository userRepository();}调用时:ApplicationGraph原创 2022-02-11 17:10:50 · 1425 阅读 · 0 评论 -
【Android】Dagger:使用Provides和Binds注入
文章目录ProvidesBindsProvides前面介绍了,使用Inject注解构造方法,可以让Dagger实现注入。但是对于第三方提供的类,我们无法在构造方法上添加注解。一个汽车生产商,使用其他公司提供的发动机Engine组装汽车Car。我使用了Inject注解Car的构造方法。public class Car { private Engine engine; @Inject public Car(Engine engine) { this.engin原创 2022-02-11 10:55:20 · 1453 阅读 · 0 评论 -
【Android】Dagger单例模式的实现
前面介绍了Dagger框架的简单使用。可以通过Dagger创建一个Car:Car car = DaggerCarComponent.create().car();当我们试图获取两次car时:CarComponent carComponent = DaggerCarComponent.create();Car car1 = carComponent.car();Car car2 = carComponent.car();System.out.println(car1 == car2);输出原创 2022-02-10 14:47:19 · 497 阅读 · 0 评论 -
【Android】Dagger的简单使用
Dagger是goole提供的一款依赖注入框架,目的在于项目解耦,提高项目的灵活性。下面仅使用两个注解@Inject和@Component来入门Dagger。首先添加依赖compile 'com.google.dagger:dagger:2.23.2'annotationProcessor 'com.google.dagger:dagger-compiler:2.23.2'现在有两个类Engine和Car:public class Engine { public Engine()原创 2022-02-10 14:28:31 · 1722 阅读 · 0 评论 -
Git仓库迁移
Git仓库迁移原创 2021-12-23 16:47:13 · 1174 阅读 · 0 评论 -
Android性能优化:使用Profiler进行内存优化
使用Profiler分析内存,减少gc,提高App性能原创 2021-12-20 23:20:24 · 6023 阅读 · 0 评论 -
使用Retrofit+RxJava框架时,OnError报错
使用Retrofit+RxJava3进行网络请求,如果在订阅时,只处理了onNext的回调,没有处理onError的回调时,如下图,会抛出异常,造成app崩溃。getService(CommonApi.class).checkUpdate() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(r原创 2021-12-09 18:40:55 · 788 阅读 · 0 评论 -
Android性能优化:使用Android Studio的Profiler分析函数执行时间
Profiler是Android Studio内置的一个分析app性能的利器,是优化app必不可少的帮手。功能涵盖了函数执行,内存分配,流量使用,耗电量等诸多方面。今天就从实战的角度聊一聊,如何使用Profiler分析函数执行时间。Profiler位于底部工具栏点开后是这样的:点击左上角的加号,可以看到正在运行的项目的进程。点击进程后,右侧开始滚动关于该进程的信息,第一行是cpu,第二行是内存,第三行是流量,第四行是耗电量。分析函数执行时间,使用的是第一行cpu。点击第一行,就会进入cp原创 2021-11-29 22:30:22 · 7835 阅读 · 1 评论 -
Recycler缓存机制
四级缓存原创 2021-10-27 21:10:57 · 425 阅读 · 0 评论 -
Activity和Fragment生命周期详解:两个生命的纠缠
文章目录生命周期图无处不在的FragmentManagerFragmentManagerImpl记录Activity生命周期mCurStatemState记录Fragment生命周期FragmentTransactionaddcmd值的意义cmd值的使用commitFragmentManagerImplgetSupportFragmentManager()Fragment中的mState生命周期图无处不在的FragmentManagerFragmentActivity通过我们熟悉的FragmentM原创 2021-09-13 11:14:35 · 353 阅读 · 0 评论 -
Android 让人卧槽的自定义view
项目中遇到了这样一个问题:产品中存在多种药态:饮片、水丸、膏方、粉剂、蜜丸等等。不同的药态对应不同的服用规则,规则中红色的数字是可以编辑的,且有默认值,服用规则有如下几种:切换药态时,服用规则同步切换。1、普通思路:创建一个布局文件xml,观察规则,添加 5 个TextView和 4 个EditView,就可以覆盖所有的可能性,然后在每个class中单独赋值即可。这样有几种弊端:a,代码量大:需要判断每个药态,然后给每个View进行赋值。b,灵活性低:如果产品端准备加一个药态,需要原创 2021-06-25 22:14:54 · 277 阅读 · 2 评论