自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

移动端开发干货分享

公众号「AndroidPub」| 字节面试官,收简历:[email protected]

  • 博客(16)
  • 收藏
  • 关注

原创 【Android Jetpack】Paging3使用方法介绍

Jetpack Paging提供了列表中分页数据加载的解决方案,已经被广泛熟知和使用,目前这个库升级到了3.0版本。Paging3 基于Kotlin协程进行了重写,兼容Flow、Rxjava、LiveData等多种API方式。本文,我们将基于一个api请求的Sample,学习一下Paging3的使用。我们使用https://reqres.in/提供的mock接口:request:https://reqres.in/api/users?page=1response:Sample代码结构如下..

2020-10-31 15:54:15 2904 4

原创 Android优化apk包体积的常用方法

经过大量数据验证,apk的体积与应用安装量程负相关关系,更小的体积将带来更多的装机量。Android Size Analyser 插件想要优化包体积,首先要分析安装包中各部分的空间占比。我们一般将将apk拖入android studio进行分析,另外推荐使用Android Size Analyser插件,它可以在分析的同时直接给出优化建议Lint使用Lint进行静态检查,可以发现一些可以删除的资源和代码,帮助我们优化包体图片压缩除了删除无用资源,还可以通过替换图片格式达到"压缩.

2020-10-31 11:35:16 1104

原创 【Android Jetpack】使用DataStore替换SharedPreferences实现数据持久化

DataStoreDataStore是Jetpack近期新推出的组件,可以以下处理两种类型的数据持久化:DataStore TypeDescriptionPreferences DataStore像SharedPreferences一样,以键值对的形式进行基本类型的数据存储。DataStore 基于 Flow 实现异步存储,避免因为阻塞主线程带来的ANR问题Proto DataStore基于Protobuf实现任意自定义类型的数据存储,需要定义Protobuf的IDL,.

2020-10-31 01:41:43 3046

原创 【Android Jetpack】在Navigation中使用自定义View

Navigation是Jetpack中的重要组件之一,用来设计和组织App的页面跳转。由于官方推荐使用Framgent承载页面的实现,所以一提到Navigation首先想到的是Fragment。但其实Navigation同样支持其他类型的页面实现,例如自定义View。本文将介绍一下Navigation中自定义View的使用。正式介绍之前,先回顾一下Navigation的基本使用:Navigation基本构成Navigation的使用主要涉及以下几个对象Graph通过XML来设计APP的页面(D

2020-10-26 01:36:25 536

原创 【Android】论自定义View替代Fragment的可行性

Framgent当今的Android开发都少不了对Fragment的使用,其具有很多优秀特性:分割复杂的UI可以自定义Toolbar具有生命周期回调更轻量的页面切换支持Backstack事务性提交配合ViewPager使用可在Activity重建时保存状态但是,Fragment同样有很多缺点:通过FragmentManager事务性的更新页面听起来非常安全,实际使用我们发现除了徒增模板代码外没什么用虽然支持backstack,但是使用起来不够智能且容易出错生命周期相对于Ac

2020-10-26 00:06:24 932 1

原创 【Android】源码分析ViewModel如何实现横竖屏切换时不销毁

ViewModelViewModel是Android Jetpack中的重要组件,其优势是具有下图这样的生命周期、不会因为屏幕旋转等Activity配置变化而销毁,是实现MVVM架构中UI状态管理的重要基础。class HogeActivity : AppCompatActivity { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) Log.d(T.

2020-10-24 13:30:27 1573

原创 【Kotlin】this还是it?合理使用with操作符

使用with优化代码在这里插入代码片下面是一段常见的UI配置逻辑:applicationWindow.title = "Just an example"applicationWindow.position = FramePosition.AUTOapplicationWindow.content = createContent()applicationWindow.show()applicationWindow需要反复调用,此时我们可以with进行优化,使代码更加简洁易读with(app.

2020-10-18 22:00:39 1947

原创 Roman大神带你了解Kotlin如何实现自我进化

Kotlin团队的大牛Roman Relizarov再最近的一个演讲中,介绍了一些从众多开发者中收集到的且目前呼声很高的新的语法特性,其中一些优秀的想法很可能会在未来的某个版本中出现https://youtu.be/0FF19HJDqMo那么有哪些优秀的设计呢? 让我们先睹为快!YouTrack&KEEPKotlin团队通过YouTrack收集和跟踪各种来自开发者们的意见和建议,其中一些准入的项目会进入KEEP进行管理。所以很多新的语法特性最早都是出现在YouTrack中,并通过一个KT.

2020-10-17 15:20:58 250

原创 【Android】使用Epoxy替代RecyclerView.Adapter

EpoxyEpoxy通过声明式的方式帮助RecyclerView更高效的实现数据加载、UI更新等逻辑,提高列表场景的开发效率。https://github.com/airbnb/epoxy本文将介绍一下Epoxy基本使用方法,例如我们将在列表中加载一下数据:data class Foo ( var title: String, var bar: List<Bar>)data class Bar ( var body: String, var tim

2020-10-08 21:49:37 2893 6

原创 【Android】用Kotlin方式使用ActionMode

ActionModeActionMode模式为在页面产生一个悬浮的类似于ActionBar的控件,悬浮在ActionBar之上,可以在不占用页面空间的情况下增加功能入口。ActionMode有两种模式Primary Action :控件覆盖出现在上方ActionBar之上Floating Action:控件浮动出现在任意View的四周Primary ActionFloating Action启动方式通过Activity或者View的startActionMod

2020-10-06 11:38:44 605

原创 【Kotlin协程】避免在suspend函数中使用@Synchronized修饰符

使用Kotlin时,我们通常使用@Synchronized实现线程间同步,因此很多刚接触协程的同学,视图在挂起函数上添加@Synchronized以实现”协程间同步”,这是否有效呢?1. 协程+Synchronized ?通常,协程可以帮助我们执行并行任务:suspend fun doSomething(i: Int) { println("#$i enter critical section.") // do something critical delay(1000).

2020-10-05 20:13:52 3055

原创 【Android】十行代码轻松搞定RecyclerView底部loadMore逻辑

我们经常有这样的需求:RecyclerView滑动到末尾时自动触发loadMore。传统的做法比较复杂,借助RxBinding可以非常简单地实现准备rxjava2rxkotlinrxbinding-recyclerview-v7rxbinding-recyclerview-v7-kotlin滑动监听val layoutManager = LinearLayoutManager(...)recyclerView .scrollEvents() .fil

2020-10-02 23:49:48 646

原创 【Android】FlowBinding: 使用Coroutine Flow打造响应式UI

RxBinding如今的Android开发中越来越多地开始引进MVI、Redux、单向数据流等概念,力求实现像react等前端框架那样的响应式UI开发体验。除了彻底转向Jetpack Compose那样的激进方案外,客户端也有一些因地制宜的方案,比如RxBinding,通过RxJava与Android View的配合,用Observable替代OnClickListener,从而更高效地实现基于事件驱动的UI开发。findViewById<Button>(R.id.button).cl.

2020-10-02 14:33:26 790

原创 AndroidStudio3.6的R.java文件去哪了?

从AndroidStudio3.6开始,R.java找不到了https://android-developers.googleblog.com/2020/02/android-studio-36.html原来是AGP在性能方面的优化,跳过java文件,直接生成R文件的字节码。虽然R.java没有了,但AGP会输出R.txt供我们使用。以4.0.1为例,R.txt的位置如下:app/build/intermediates/symbols/debug/R.txt内容如下:int layout

2020-10-02 11:18:05 1346 2

原创 【Android】在Kotlin中更优雅地使用LiveData

由于LiveData#Observer接口定义在Java中,且接受一个Nullable参数,导致其不能很好的兼容Kotlin的SAM以及NonNull等语法特性: viewModel.order.observe(viewLifecycleOwner, Observe { it?.let { applyCurrentOrder(it) } })Observe { .. }不能省略?.let显得非常多余现在使用lifecycle-livedata-ktx可以帮我们在Kotl.

2020-10-01 21:58:33 4124 1

原创 【Android】在Activity中使用LifecycleScope替代GlobalScope

GlobalScope的问题我们在Activity或Fragment中使用协程时,要尽量避免使用GlobalScope。class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

2020-10-01 21:25:28 12614 3

空空如也

空空如也

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

TA关注的人

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