Android
魏树鑫
天再高又怎样,踮起脚尖就更接近阳光。
展开
-
Android 发送广播更加方便快捷高效的方式
Android中还可以使用LocalBroadcastManager来进行广播的发送与接收,相对于我们经常使用的context.sendBroadcast()要方便快捷很多。LocalBroadcastManager是单例的,所以直接使用LocalBroadcastManager.getInstands(context)就可以获得到LocalBroadcastManager对象,之后可以直接使...原创 2016-04-06 18:05:59 · 265 阅读 · 0 评论 -
Activity 调用setContentView,加载视图过程分析
直接撸代码扛不住直接翻到后面,但是不看代码,只看结论,对于学习是没有什么帮助的先初始化PhoneWindow:Activity 在创建出来之后,会调用attach方法,在这里面会创建PhoneWindow,并初始化WindowManager,WindowManagerService就是Binder的本地代理对象,用于向系统Window中添加我们视图; final void Activi...原创 2019-05-19 12:27:58 · 185 阅读 · 0 评论 -
Google MVVM 中的 ViewModel 设计
架构设计原则要遵循的最重要的原则是分离关注点,也就是解藕,遵循单一职责原则。一种常见的错误是在一个 Activity 或 Fragment 中编写所有代码。这些基于界面的类应仅包含处理界面和操作系统互动的逻辑。应尽可能使这些类保持精简,这样可以避免许多与生命周期相关的问题。请注意,并不拥有 Activity 和 Fragm...原创 2019-05-14 22:50:49 · 270 阅读 · 0 评论 -
RecyclerView的缓存真是4级吗?
网上的大多数博客都是认为RecyclerView是4级缓存,但真的是4级缓存吗?知道我看了源码,才发现,RecyclerView做的远远不止4级缓存,当然是根据LayoutManager不同,缓存实现也不同,本文主要分析最最常用的LinearLayoutManager。写的有点乱,以后整理吧RecyclerView复用过程RecyclerView的中的缓存复用是由内部类Recycle...原创 2019-05-21 10:20:05 · 754 阅读 · 0 评论 -
RecyclerView优化:AsyncListDiffer的使用
AsyncListDiffer实际上是DifferUtil+Async,对DifferUtil进行了封装,实现数据比较时在异步线程,任务完成自动切换到主线程更新UI;对AsyncListDiffer的使用可以直接参考或者继承androidx.recyclerview.widget.ListAdapter,里面直接做了这部分工作,将更新后的数据集合直接submit就可以了;原理,很简单pr...原创 2019-06-18 19:54:00 · 2141 阅读 · 0 评论 -
RecyclerView优化:SortedList的使用
SortedList算不上优化,如果列表有排序的话,可以使用这个集合来代替,实现SortedListAdapterCallback.compare(Item t0, Item t1) 方法,来进行排序;比较方便和高效;原理内部数据操作大部分使用了二分查找,例如单个数据的插入,先用二分查找找出要插入的位置,然后插入;//找到插入的位置,注意条件left < rightprivat...原创 2019-06-18 20:47:15 · 808 阅读 · 0 评论 -
Android WebView 播放视频问题
硬件加速(三种)Application级别<application android:hardwareAccelerated="true">Activity级别<activity android:hardwareAccelerated="true" />View级别webView.setLayerType(View.LAYER_TYPE_SOFTWARE, nu...原创 2019-06-15 12:37:46 · 652 阅读 · 0 评论 -
RecyclerView优化:DiffUtil的使用
RecyclerView相比ListView已经有局部的定向更新,但是如果涉及到大量的数据的更新,比如执行刷新操作后,正常需要替换所有的数据,然后调用adapter.notifyDataSetChanged()进行全量更新;但是可能出现界面闪烁;另外大多数时候有一部分数据其实没有变化,理论上并不需要重新绑定;DiffUtil使用场景存在更新前和更新后的两个数据集合可以用来对比,如果直接操...原创 2019-06-15 17:23:27 · 651 阅读 · 0 评论 -
Android Manifest Activity不常用的属性
遇到的场景使用当第三方应用调用App分享时,会产生两个任务栈,如果将主App的任务栈关闭,会导致点击Logo时无法启动App//确保分享动作是连续的,如果中断的话,那么就要重新分享;//还可以防止分享中途,数据源变化,导致分享数据不正确;//将分享面板的activity添加以下属性android:noHistory=["true" | "false"]//解决切换App或者屏幕,销毁...原创 2019-06-18 15:28:13 · 284 阅读 · 0 评论 -
RecyclerView优化:AsyncListUtil的使用
AsyncListUtil 可以异步加载数据,并根据列表滑动会自动分页加载,数据加载完成会回调主线程更新UI,并且可以在Item离屏后实现Recycle缺陷refreshData()方法需要指定数据总条数,只能在调用AsyncListUtil.refresh()方法时指定,无法动态设置数据总数,如果是接口获取数据,必须已知数据总条数;fillData(data: Array<T&...原创 2019-06-18 16:20:21 · 612 阅读 · 0 评论 -
Android LocalBroadcast 发送广播更加方便快捷高效的方式
LocalBroadcast是一个应用内的局部广播,广播范围只限于应用内部,并且不属于四大组件,相对高效很多,可以用来实现事件总线,相比其他事件总线实现方案,先对简单,高效。优点广播范围只限于应用内部,不会出现数据泄漏和安全漏洞问题;相对于系统广播,更加高效便捷;相对于其他事件总线框架,实现简单,高效,不存在例如EventBus事件类代码区域划分问题;可以集中管理Action,使用...原创 2019-06-24 16:28:21 · 548 阅读 · 0 评论 -
Android Gradle 解决依赖冲突
1. 查看依赖树./gradlew dependencies2. 解决依赖冲突一旦在构建中存在依赖冲突,开发人员需要决定哪个版本的库最终包含在构建中,有许多解决冲突的方法。1. 逐个排除compile('junit:junit:4.12'){ exclude group : 'org.hamcrest',module:'hamcrest-core'}//最终,如果我们向包...原创 2019-04-25 10:19:08 · 1519 阅读 · 0 评论 -
Java和Kotlin类的初始化顺序
JavaJava程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造器 -> 子类非静态变量 -> 子类非静态代码块 -> 子类构造器。Java程序初始化一般遵循3个原则:静态对象(变量)先于非静态对象(变量)初始化。其中静态对象(变...原创 2019-04-26 10:10:46 · 1244 阅读 · 0 评论 -
两年的Android成长之路(一)
前言又是一年,毕业就成了名副其实的程序员。两年多Android开发,从最初的小白,到现在可以自己设计一些东西;从最初面对需求的茫然,到现在游刃有余,一路的成长和成果,到此做个小结。大牛可以略过,希望能对刚刚踏上Android这条路的同学有一点点帮助。Android架构的演进(一)一、架构v0.1(假装有架构) 1. 最初刚工作时,独立开发,并没有想太多(也不懂),项目紧,任务重,很多...原创 2018-03-13 15:54:28 · 359 阅读 · 0 评论 -
Idea或Android Studio查看字节码
在Preference中添加External Tools,保存就能用了;效果原创 2019-04-26 10:10:37 · 942 阅读 · 0 评论 -
Android 应用全局字体调节或禁止随系统字体大小更改
1.禁止跟随系统字体大小调节在Application中复写getResources()方法 @Override public Resources getResources() {//还原字体大小 Resources res = super.getResources(); Configuration configuration = res.getCo...原创 2019-04-25 10:20:27 · 2445 阅读 · 0 评论 -
Android Studio 关联源码
Android Studio安装完之后,在查看源码时,会发现源码不会自动关联,点击了download之后,源码虽然下载下来了,但是无论怎么刷新都还不会关联上,至此,找到解决办法。#找到源码配置文件windows C:\Users\用户\.AndroidStudio2.1\config\options 这个路径,找到jdk.table.xml这个文件 mac ...原创 2019-04-25 10:22:23 · 1304 阅读 · 0 评论 -
LayoutInflater 填充器解析
填充View最终都是调用LayoutInflater的public View inflate(@LayoutRes int resource, @Nullable ViewGroup root, boolean attachToRoot)三个参数方法 /** * Inflate a new view hierarchy from the specified xml resourc...原创 2019-04-25 10:23:58 · 164 阅读 · 0 评论 -
Android 即时通信IM架构
原创 2019-04-25 10:24:55 · 2024 阅读 · 1 评论 -
Android Studio 本地仓库关联Git仓库
1. 首先将本地仓库启用Git2. 关联远程仓库3. 同步远程仓库,选master分支,否则本地和远程分支不一致完成,之后就可以正常提交了,如果有分支冲突可以选择合并策略:Strategy合并策略(来源:https://www.jianshu.com/p/58a166f24c81)Git可以通过添加-s参数来指定合并的策略。一些合并策略甚至含有自己的参数选项,通过-X设置这些合并...原创 2019-04-25 10:41:54 · 3332 阅读 · 0 评论 -
Android 系统架构图
可以查看 https://developer.android.com/guide/platformAndroid 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。下图所示为 Android 平台的主要组件。Linux 内核Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低...原创 2019-04-25 10:56:41 · 6766 阅读 · 0 评论 -
Android 三层架构
原创 2019-04-25 10:43:05 · 1685 阅读 · 0 评论 -
Android Studio 新的依赖配置对比
依赖项配置在 dependencies 代码块内,您可以使用几种不同依赖项配置中的一种(例如上文所示的 implementation)声明库依赖项。 每项依赖项配置都为 Gradle 提供有关如何使用依赖项的不同说明。 下表介绍您可以在 Android 项目中对依赖项使用的每种配置。 此表还将这些配置与自 Android Gradle Plugin 3.0.0 起弃用的配置进行比较。新...原创 2019-07-17 18:11:54 · 657 阅读 · 0 评论