
Android
李四爷
这个作者很懒,什么都没留下…
展开
-
Navigation修改版-避免生命周期重复回调
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货源码解析谷歌推出Navigation主要是为了统一应用内页面跳转行为。本文主要是根据Navigation版本为2.1.0 的源码进行讲解。'androidx.navigation:navigation-fragment:2.1.0' 'androidx.navigation:navigation-ui:2.1.0' 'androidx.navigation:navigation-fragment-kt.原创 2020-06-05 17:26:27 · 4826 阅读 · 0 评论 -
Android Jetpack架构开发组件化应用实战
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货项目介绍本项目采用组件化+MVVM架构进行开发,对功能组件和业务组件进行拆分,通过ARouter进行组件之间的通信。本文主要是对整个应用的技术架构作一个简单的介绍。项目地址:https://github.com/winlee28/Jetpack-WanAndroid 欢迎star技术要点Kotlin+Jetpack+Coroutines+Retrofit+koin项目整体架构图:宿主App没有任何的业务代码,整个.原创 2020-06-02 19:26:59 · 1109 阅读 · 0 评论 -
全新的视图绑定工具 — ViewBinding 使用指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言我们在Android开发的过程中总是需要获取XML布局中的ViewId,以便给其赋值进行显示,早期我们只能使用 findViewById 这个API,会导致很多的模版代码出现。2013年左右Android界大神 Jake Wharton开源了Butter Knife框架,通过Bind(“viewid”)方式方便...原创 2019-12-13 15:46:46 · 2571 阅读 · 3 评论 -
Android Jetpack架构组件 — Navigation入坑详解
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构。应用内Fragment页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。具体使用在app的gra...原创 2019-12-11 16:00:55 · 1393 阅读 · 1 评论 -
Android Jetpack架构组件 — Room入坑详解
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货Room是Jetpack组件库一员,属于ORM库,主要是对Sqlite做了一层抽象,从而简化开发者对数据库操作。Room支持编译时的语法检查,并且支持返回LiveData。添加依赖在app的build.gradle中添加如下依赖:def room_version = "2.2.0-rc01" impleme...原创 2019-11-27 19:45:18 · 2258 阅读 · 2 评论 -
Android Jetpack架构组件 — LiveData与ViewModel入坑详解
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言前一篇文章我们讲解了Lifecycle的具体使用,为了更好的理解,本篇我们将LiveData和ViewModel放在一起讲解,通过简单的Demo来说明二者之间的协同工作。那么我们为什么要使用LiveData和ViewModel呢?他们有什么优势呢?在LiveData出现之前,一般状态分发我们使用EventB...原创 2019-11-22 19:35:45 · 1322 阅读 · 0 评论 -
Android Jetpack架构组件 — Lifecycle入坑指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货背景介绍上一篇文章我们主要是介绍了Jetpack的由来以及四大组件各包含的组件库。本篇文章我们将来学习架构组件中的Lifecycle组件。Lifecycle组件是帮忙我们管理Activity和Fragment的生命周期,也就是说,当Activity或者Fragment的生命周期发送变化的时候我们可以得到通知。我们通...原创 2019-11-20 17:00:15 · 933 阅读 · 0 评论 -
还不知道Android Jetpack是什么?你就out了
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货简介谷歌在 2018 I/O 大会上发布了一系列辅助android开发者的实用工具,这套工具就是Jetpack,它是一套库、工具和指南的合集,可以帮助开发者更轻松地编写和构建出色的 Android 应用程序。Jetpack中的有些组件并不是第一次推出,其中LifeCycle、LiveData、ViewModel...原创 2019-11-19 15:42:29 · 1707 阅读 · 0 评论 -
如何监测Android应用卡顿?这篇就够了
本文首发于微信公众号「Android开发之旅」,欢迎关注卡顿介绍用户在使用我们应用的时候,很多问题是很难被及时的发现的比如内存占用高,耗费流量等,但是一旦发生卡顿就会被用户直观的感受到。所以应用卡顿是很影响用户体验的。另外一方面,对于开发者来说,卡顿的问题很难定位,发生问题的原因错综复杂,比如:代码问题、内存问题、绘制问题以及IO操作等等。而且线上发生的卡顿问题在线下我们很难复现,因为这和...原创 2019-11-04 15:04:33 · 3220 阅读 · 3 评论 -
Android性能优化之布局优化实战
本文首发于微信公众号「Android开发之旅」,欢迎关注Android绘制原理手机渲染主要依赖于两个硬件:CPU和GPU,其中CPU主要负责计算显示内容,其中包括视图创建、布局计算、图片解码和文本绘制等。GPU主要负责栅格化(UI元素绘制到屏幕上),比如将Button、Bitmap拆分成不同的像素进行显示,最后完成绘制。手机上显示的文字就是先通过CPU换算成纹理后在交给GPU进行渲染。...原创 2019-10-31 16:19:44 · 440 阅读 · 0 评论 -
Android性能优化之启动优化实战
本文首发于微信公众号“Android开发之旅”前言本文将带领大家来看看启动优化相关方面的介绍以及各种优化的方法。希望你在读完本章后会有所收获。相信很多同学都听过八秒定律,八秒定律是在互联网领域存在的一个定律,即指用户访问一个网站时,如果等待网页打开的时间超过了8秒,就有超过70%的用户放弃等待。足见启动的时间是多么的重要。放到移动APP中,那就是应用启动的时间不能太久,否则就会造成用户的...原创 2019-10-29 17:21:47 · 644 阅读 · 0 评论 -
App性能概览与平台化实践概述
本文首发于微信公众号「Android开发之旅」,欢迎关注现在大家都在谈性能优化或者在面试的时候被问到性能优化相关问题,那么我们为什么要做性能优化呢?以及性能优化的难点是什么?在整个项目周期中不同的阶段该做什么?优化效果如何长期保持?带着这些问题我们来一起看看如何做性能优化。当一款App在被用户使用的时候,如果出现各种异常、奔溃、卡顿等问题,那么在有耐心的用户也会毫不犹豫的卸载App的(...原创 2019-10-28 16:24:06 · 430 阅读 · 0 评论 -
Android静默拍照(无感知拍照)
在安卓系统下,实现拍照主要有两种方式:第一种就是直接调用系统的相机实现拍照,简单快捷。但是弊端就是不能自定义拍照界面。第二种就是根据Android系统提供的相关API进行自定义拍照,这样就是可以根据具体需求实现相机界面。本篇文章主要讲解根据系统API自定义相机拍照,使用SurfaceView进行相机预览图,但是我们要实现的是静默拍照 也就是说不能出现预览图,但是由于安全因素考虑,Android...原创 2017-06-09 13:17:48 · 13849 阅读 · 4 评论 -
Activity的onSaveInstanceState调用时机
Activity为我们提供了两个回调方法onSaveInstanceState和onRestoreInstanceState 用于当Activity在不是用户主动意识关闭的情况下来进行页面数据的保存和恢复。那么那些情况下onSaveInstanceState会被调用呢?这个就是写个Demo就会一目了然了。分别有以下几种情况:1、当用户按下Home键 app处于后台,此时会调用onSaveI...原创 2017-03-20 21:03:48 · 1805 阅读 · 0 评论 -
Android 实现底部弹出对话框效果
本文主要是利用Dialog 实现 从屏幕底部弹出对话框的效果 并且有动画效果。线上效果图:首先先在style.xml中定义对话框的样式 如下 <style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@n...原创 2016-12-16 15:28:48 · 6677 阅读 · 10 评论 -
使用TabLayout 实现顶部选项卡功能
TabLayout 是谷歌在2015年I/O大会中提出的 很方便的实现顶部选项卡功能 文档中的描述:Population of the tabs to display is done through TabLayout.Tab instances. You create tabs via newTab(). From there you can change the tab's label原创 2015-12-07 17:35:51 · 1964 阅读 · 1 评论 -
FragmentTabHost实现app底部tab功能
FragmentTabHost是继承之TabHost的 但是TabHost已经过时 FragmentTabHost是结合fragment一起使用的 在使用的过程中需要注意 Activity必须是继承之FragmentActivity的 否则会报错 使用FragmentTabHost主要流程步骤:每一个tab通过enum进行定义 代码如下:public enu原创 2015-12-07 17:12:46 · 989 阅读 · 0 评论 -
带数字进度的seekbar
最近做项目有个需求是要使用seekbar的,但是原生的seekbar又不满足要求,只能自己动手操作了。首先先交代下需求:在seekbar滑动的过程中在其上方动态的显示当前的进度。思路:1、在seekbar上方动态的添加一个textview2、在seekbar滑动监听中修改textview的位置就是这么简单,那么实现起来怎么样呢?为了能够动态的添加textvie...原创 2016-08-05 17:06:38 · 7078 阅读 · 0 评论 -
ScrollView实现标题栏渐变效果
首先,简单的思路就是在ScrollView滚动的时候 动态的去改变标题栏的透明度即可实现。先看下效果图:那么ScrollView有哪些滑动回调的方法呢? 只可惜,SDK只有在23的时候提供了一个setOnScrollChangeListener回调。但是SDK提供了另外一个方法可以获取到ScrollView滑动的距离: /** * This is call...原创 2016-09-14 11:08:07 · 4581 阅读 · 1 评论 -
Widget的简单使用详解
Widget是安卓的一个桌面小工具组件—窗口小部件,是微型应用程序视图,可以嵌入到其他应用程序(如主屏幕)和接收定期更新。使用步骤:1、创建一个类继承AppWidgetProvider 并重写相应方法 默认实现了onReceive 方法。2、在清单文件进行注册。3、在res目录下新建xml文件夹 配置widget相关信息。4、创建widget展示布局。5、创建widge...原创 2016-11-09 15:27:16 · 11809 阅读 · 0 评论 -
自定义View实现圆形进度条
本例子是实现了一个圆形的进度条功能,同时还可以控制进度的速度。先上效果图:Android自定义View的实现步骤:1、自定义View的属性2、在自定义View的构造方法中获取属性3、[ 重写onMeasure ] 方法4、重写 onDraw方法第三步并不是必须的 但是大部分自定义控件都是需要的。从上图我们可以看出需要自定义的一些属性:圆环的底色,进度原创 2016-11-16 14:55:36 · 452 阅读 · 0 评论 -
View视图跟随手指移动
之前 看过跟多App在页面中都有一个浮动的按钮,可以随意的在屏幕中拖动 释放后自动贴在屏幕边缘,这个效果其实很简单 就是onTouchEvent事件,在事件中分别处理Down,move,up事件即可。先看效果图:为了防止浮动按钮超出屏幕,还需要和屏幕宽高进行实时比对,以下方法是获取屏幕的宽高: WindowManager wm = (WindowManager...原创 2016-11-02 17:27:00 · 1132 阅读 · 0 评论 -
Android Material design设计风格
此Demo主要使用了以下控件:DrawerLayout+CoordinatorLayout+AppBarLayout+Toolbar+TabLayout+ViewPager+NavigationView+Snackbar 实现了抽屉效果 和滑动时Toolbar自动消失等效果线上效果图:在项目的gradle中添加 :compile 'com.android.support:d...原创 2016-11-23 18:16:05 · 3878 阅读 · 0 评论 -
Andorid6.0动态权限及开源项目EasyPermissions使用介绍
Andorid在M之后 将原有权限系统进行了重新的设计 ,将权限分为两大块分别是NormalPermission 和Dangerous Permission 。不管是哪种权限都和M之前的系统一样 只要使用就需要在清单文件中进行注册 ,但是对于Dangerous Permission 这样做还远远不够 ,开发者必须要动态的在代码使用权限的地方进行申请,必须经过用户同意之后才可以使用相应的权限。官原创 2016-12-08 12:03:58 · 3322 阅读 · 1 评论 -
Android6.0以下系统判断相机权限
参考博文http://blog.youkuaiyun.com/jm_beizi/article/details/51728495关于Android权限检测问题 在6.0系统以后由于使用的是动态权限 很好判断 关键是6.0之前的系统发现没有可用的API来获取相应的权限是否被用户禁用或者允许使用。其中有相应的checkPermission()方法 但是这些方法只是判断清单文件中是否注...原创 2016-07-27 14:03:49 · 13718 阅读 · 4 评论