- 博客(55)
- 资源 (9)
- 收藏
- 关注
原创 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
4819
原创 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
原创 全新的视图绑定工具 — ViewBinding 使用指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言我们在Android开发的过程中总是需要获取XML布局中的ViewId,以便给其赋值进行显示,早期我们只能使用 findViewById 这个API,会导致很多的模版代码出现。2013年左右Android界大神 Jake Wharton开源了Butter Knife框架,通过Bind(“viewid”)方式方便...
2019-12-13 15:46:46
2567
3
原创 Android Jetpack架构组件 — Navigation入坑详解
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言Navigation 直接翻译即为导航,它是 Android Jetpack 组件之一,让单 Activity 应用成为首选架构。应用内Fragment页面的跳转则由 Navigation 来处理,开发者无需在处理 FragmentTransaction 的复杂性以及相关的转场动画。具体使用在app的gra...
2019-12-11 16:00:55
1389
1
原创 如何在 Java 和 Kotlin 之间进行互操作
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言目前kotlin是谷歌首推的开发Android的语言,但由于历史原因,我们绝大部分项目依旧还是以Java为主的,也就是说存在Java和Kotlin两种语言同时开发的情况。有人会说把老项目全部翻译成Kotlin,的确可以怎么做,但是成本还是挺大的。我们只能一点一点慢慢的向kotlin语言迁移。那么在迁移的过程...
2019-12-03 19:37:51
1225
原创 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
2251
2
原创 Android Jetpack架构组件 — LiveData与ViewModel入坑详解
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言前一篇文章我们讲解了Lifecycle的具体使用,为了更好的理解,本篇我们将LiveData和ViewModel放在一起讲解,通过简单的Demo来说明二者之间的协同工作。那么我们为什么要使用LiveData和ViewModel呢?他们有什么优势呢?在LiveData出现之前,一般状态分发我们使用EventB...
2019-11-22 19:35:45
1317
原创 Android Jetpack架构组件 — Lifecycle入坑指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货背景介绍上一篇文章我们主要是介绍了Jetpack的由来以及四大组件各包含的组件库。本篇文章我们将来学习架构组件中的Lifecycle组件。Lifecycle组件是帮忙我们管理Activity和Fragment的生命周期,也就是说,当Activity或者Fragment的生命周期发送变化的时候我们可以得到通知。我们通...
2019-11-20 17:00:15
931
原创 还不知道Android Jetpack是什么?你就out了
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货简介谷歌在 2018 I/O 大会上发布了一系列辅助android开发者的实用工具,这套工具就是Jetpack,它是一套库、工具和指南的合集,可以帮助开发者更轻松地编写和构建出色的 Android 应用程序。Jetpack中的有些组件并不是第一次推出,其中LifeCycle、LiveData、ViewModel...
2019-11-19 15:42:29
1703
原创 Flutter混合开发(三):Android与Flutter之间通信详细指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货通信场景我们在做Flutter混合开发的时候通常需要进行Flutter和Native之间的通信。 比如Dart调用Native的相册选择图片,Native将电量、GPS信息主动传递给Dart等等。在混合开发中通信通常有以下几种:初始化Flutter时Native向Dart传递数据。Native发送数据给Dar...
2019-11-15 15:39:07
2116
1
原创 Flutter混合开发(二):iOS项目集成Flutter模块详细指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货前言前一篇文章讲解了Android原生工程如何集成Flutter项目的具体过程,Flutter混合开发(一):Android项目集成Flutter模块详细指南 ,本篇将带着大家来一起学习原生iOS项目如何集成Flutter。因为每个版本的集成逻辑都是有差别的,所以这里交代下本篇文章的集成版本:Flutter (...
2019-11-12 19:36:23
1680
原创 Flutter混合开发(一):Android项目集成Flutter模块详细指南
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货混合开发应用场景目前在国内开发纯Flutter的应用还是比较少的,绝大部分使用Flutter来开发的公司也都是使用混合开发。那么混合开发的主要使用场景有哪些呢?作为独立的页面进行加入,可以从原生页面跳转到Flutter页面,也可以从Flutter页面跳转到原生页面。作为页面的一部分嵌入。创建F...
2019-11-07 19:58:24
2899
原创 Flutter开发必备Dart基础:Dart快速入门
本文首发于微信公众号「Android开发之旅」,欢迎关注 ,获取更多技术干货概述Dart从2.0开始变为强类型语言,静态类型。这点和Java、C#等比较相似。也就是说在编译时就已经知道变量的类型那么就是静态类型语言。开发人员在开发的时候需要指定变量的类型。这有什么优点呢? 就是所有类型检查都可以通过编译器来完成。可以提前预报一些琐碎的错误。同时Dart还是面向对象的编程语言。像pytho...
2019-11-05 18:51:48
611
原创 如何监测Android应用卡顿?这篇就够了
本文首发于微信公众号「Android开发之旅」,欢迎关注卡顿介绍用户在使用我们应用的时候,很多问题是很难被及时的发现的比如内存占用高,耗费流量等,但是一旦发生卡顿就会被用户直观的感受到。所以应用卡顿是很影响用户体验的。另外一方面,对于开发者来说,卡顿的问题很难定位,发生问题的原因错综复杂,比如:代码问题、内存问题、绘制问题以及IO操作等等。而且线上发生的卡顿问题在线下我们很难复现,因为这和...
2019-11-04 15:04:33
3216
3
原创 Android性能优化之布局优化实战
本文首发于微信公众号「Android开发之旅」,欢迎关注Android绘制原理手机渲染主要依赖于两个硬件:CPU和GPU,其中CPU主要负责计算显示内容,其中包括视图创建、布局计算、图片解码和文本绘制等。GPU主要负责栅格化(UI元素绘制到屏幕上),比如将Button、Bitmap拆分成不同的像素进行显示,最后完成绘制。手机上显示的文字就是先通过CPU换算成纹理后在交给GPU进行渲染。...
2019-10-31 16:19:44
439
原创 Android性能优化之启动优化实战
本文首发于微信公众号“Android开发之旅”前言本文将带领大家来看看启动优化相关方面的介绍以及各种优化的方法。希望你在读完本章后会有所收获。相信很多同学都听过八秒定律,八秒定律是在互联网领域存在的一个定律,即指用户访问一个网站时,如果等待网页打开的时间超过了8秒,就有超过70%的用户放弃等待。足见启动的时间是多么的重要。放到移动APP中,那就是应用启动的时间不能太久,否则就会造成用户的...
2019-10-29 17:21:47
642
原创 App性能概览与平台化实践概述
本文首发于微信公众号「Android开发之旅」,欢迎关注现在大家都在谈性能优化或者在面试的时候被问到性能优化相关问题,那么我们为什么要做性能优化呢?以及性能优化的难点是什么?在整个项目周期中不同的阶段该做什么?优化效果如何长期保持?带着这些问题我们来一起看看如何做性能优化。当一款App在被用户使用的时候,如果出现各种异常、奔溃、卡顿等问题,那么在有耐心的用户也会毫不犹豫的卸载App的(...
2019-10-28 16:24:06
426
原创 flutter玩安卓APP系列文章(一):首页功能实现
首页功能首页模块分为上下两个部分,上半部分为滚动的banner,下半部分为文章列表,下面就来看下各个部分是如何实现的。github项目地址 欢迎starBanner首页需要引入banner插件,大家所需要的插件可以到 https://pub.dev 中查找。我们在这里引入 flutter_swiper 插件。siwiper支持多种布局,无限轮播,Android和iOS双端适配。下面看下...
2019-06-11 15:57:53
959
原创 Kotlin-入门基础
Kotlin这门语言的设计哲学是务实、简洁、安全、互操作性。而且是跨平台的,可以作为Android平台的开发语音,也可以开发后台等等。首先,国际惯例,先来个“Hello World”程序来了解下kotlin。fun main(args: Array<String>) { println("Hello World")}从这一段代码中你能了解Kotlin的哪些...
2018-09-28 17:37:37
530
原创 深入浅出RxJava—操作符
原文链接参考文章本篇文章将重点介绍RxJava中的操作符,RxJava的强大性就来于它所定义的操作符。假如我们现在有这样一个接口,返回一个网站地址list集合,并将集合数据进行打印,基于上一篇文章,我们可能写出这样的代码:先贴出query方法代码:1 public ObservableListString>> query() {23
2017-08-29 14:56:29
434
原创 深入浅出RxJava—基础篇
原文链接参考文章在项目gradle中引入 compile 'io.reactivex:rxjava:1.0.14' compile 'io.reactivex:rxandroid:1.0.1'基础ObservableString> observable = Observable.create(new Observable.OnS
2017-08-25 13:58:31
450
原创 Android静默拍照(无感知拍照)
在安卓系统下,实现拍照主要有两种方式:第一种就是直接调用系统的相机实现拍照,简单快捷。但是弊端就是不能自定义拍照界面。第二种就是根据Android系统提供的相关API进行自定义拍照,这样就是可以根据具体需求实现相机界面。本篇文章主要讲解根据系统API自定义相机拍照,使用SurfaceView进行相机预览图,但是我们要实现的是静默拍照 也就是说不能出现预览图,但是由于安全因素考虑,Android...
2017-06-09 13:17:48
13839
2
原创 Activity的onSaveInstanceState调用时机
Activity为我们提供了两个回调方法onSaveInstanceState和onRestoreInstanceState 用于当Activity在不是用户主动意识关闭的情况下来进行页面数据的保存和恢复。那么那些情况下onSaveInstanceState会被调用呢?这个就是写个Demo就会一目了然了。分别有以下几种情况:1、当用户按下Home键 app处于后台,此时会调用onSaveI...
2017-03-20 21:03:48
1801
原创 Android 实现底部弹出对话框效果
本文主要是利用Dialog 实现 从屏幕底部弹出对话框的效果 并且有动画效果。线上效果图:首先先在style.xml中定义对话框的样式 如下 <style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@n...
2016-12-16 15:28:48
6674
4
原创 Andorid6.0动态权限及开源项目EasyPermissions使用介绍
Andorid在M之后 将原有权限系统进行了重新的设计 ,将权限分为两大块分别是NormalPermission 和Dangerous Permission 。不管是哪种权限都和M之前的系统一样 只要使用就需要在清单文件中进行注册 ,但是对于Dangerous Permission 这样做还远远不够 ,开发者必须要动态的在代码使用权限的地方进行申请,必须经过用户同意之后才可以使用相应的权限。官
2016-12-08 12:03:58
3320
1
原创 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
3876
原创 自定义View实现圆形进度条
本例子是实现了一个圆形的进度条功能,同时还可以控制进度的速度。先上效果图:Android自定义View的实现步骤:1、自定义View的属性2、在自定义View的构造方法中获取属性3、[ 重写onMeasure ] 方法4、重写 onDraw方法第三步并不是必须的 但是大部分自定义控件都是需要的。从上图我们可以看出需要自定义的一些属性:圆环的底色,进度
2016-11-16 14:55:36
450
原创 Widget的简单使用详解
Widget是安卓的一个桌面小工具组件—窗口小部件,是微型应用程序视图,可以嵌入到其他应用程序(如主屏幕)和接收定期更新。使用步骤:1、创建一个类继承AppWidgetProvider 并重写相应方法 默认实现了onReceive 方法。2、在清单文件进行注册。3、在res目录下新建xml文件夹 配置widget相关信息。4、创建widget展示布局。5、创建widge...
2016-11-09 15:27:16
11785
原创 View视图跟随手指移动
之前 看过跟多App在页面中都有一个浮动的按钮,可以随意的在屏幕中拖动 释放后自动贴在屏幕边缘,这个效果其实很简单 就是onTouchEvent事件,在事件中分别处理Down,move,up事件即可。先看效果图:为了防止浮动按钮超出屏幕,还需要和屏幕宽高进行实时比对,以下方法是获取屏幕的宽高: WindowManager wm = (WindowManager...
2016-11-02 17:27:00
1130
原创 ScrollView实现标题栏渐变效果
首先,简单的思路就是在ScrollView滚动的时候 动态的去改变标题栏的透明度即可实现。先看下效果图:那么ScrollView有哪些滑动回调的方法呢? 只可惜,SDK只有在23的时候提供了一个setOnScrollChangeListener回调。但是SDK提供了另外一个方法可以获取到ScrollView滑动的距离: /** * This is call...
2016-09-14 11:08:07
4577
原创 带数字进度的seekbar
最近做项目有个需求是要使用seekbar的,但是原生的seekbar又不满足要求,只能自己动手操作了。首先先交代下需求:在seekbar滑动的过程中在其上方动态的显示当前的进度。思路:1、在seekbar上方动态的添加一个textview2、在seekbar滑动监听中修改textview的位置就是这么简单,那么实现起来怎么样呢?为了能够动态的添加textvie...
2016-08-05 17:06:38
7072
原创 Android6.0以下系统判断相机权限
参考博文http://blog.youkuaiyun.com/jm_beizi/article/details/51728495关于Android权限检测问题 在6.0系统以后由于使用的是动态权限 很好判断 关键是6.0之前的系统发现没有可用的API来获取相应的权限是否被用户禁用或者允许使用。其中有相应的checkPermission()方法 但是这些方法只是判断清单文件中是否注...
2016-07-27 14:03:49
13709
原创 RxJava入门——概念篇
1、概念RxJava基本概念:Observable(被观察者),Observer(观察者),subscribe(订阅) ,被观察者和观察者通过subscribe方法实现订阅关系。RxJava的事件回调方法有OnNext(),onCompleted(),onError()。 onCompleted:事件队列完成是执行。RxJava不仅把每个事件单独处理,还会把他们看做一个队列。RxJav
2016-07-26 17:21:36
683
原创 使用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
1962
1
原创 FragmentTabHost实现app底部tab功能
FragmentTabHost是继承之TabHost的 但是TabHost已经过时 FragmentTabHost是结合fragment一起使用的 在使用的过程中需要注意 Activity必须是继承之FragmentActivity的 否则会报错 使用FragmentTabHost主要流程步骤:每一个tab通过enum进行定义 代码如下:public enu
2015-12-07 17:12:46
985
原创 java基础——反射
反射就是把Java类中的各个成分映射成一个个java对象。 一个类有成员变量、方法、构造函数等信息,利用反射可以对一个类进行解 剖,把各个组成部分映射成一个个对象。反射构造函数: //获取字节码文件 Class clazz = Class.forName(对象的路径如:”cn.itcast.domain.Student”) //获取构造
2015-04-09 15:55:04
517
原创 java基础——HttpServletResponse和HttpServletRequest
HttpServletResponse:1、HttpServletResponse(请求) 常用的API: setStatus设置响应状态码 setHeader设置响应头信息 getWriter获得响应体字符输出流 getWriter和getOutputStream生成内容是Http协议响应体,
2015-04-01 21:03:23
863
原创 java基础——Servlet入门
1、servlet快速入门 1、在MyEclipse工具中创建web project 2、在工程中创建class并继承HTTPServlet 3、在Servlet中覆盖doGet和doPost方法 4、在web服务器中注册Servlet程序(在web.xml中注册)注册方法: HelloServlet c
2015-04-01 21:00:03
687
原创 java基础——XML和DOM解析
学习了XML:是什么?有什么特点?怎么使用?什么时候用?XML是可扩展的标记语言,类似于HTML但是他的设计是用来描述数据的而不是显示数据的,HTML是用来显示数据的,他的标记没有被定义,所以要使用者自己定义,标记分为开始标记和结束标记,结束标记不可以省略,在开始和结束标记之间还可以嵌套其他的标记,但是不可以交叉嵌套,一般用来做软件的配置文件使用,在书写的时候要注意书写规范。1、文档声明:
2015-04-01 20:57:30
526
原创 java基础——JDK5.0新特性
1、静态导入:不是很常用 使用这个方法可以简化书写,简化对类静态属性和方法的调用 语法:import static 包名.类名.静态属性|静态方法|* 例:import static java.lang.System.out import static java.lang.Math.*2、自动装箱/拆箱 自动装箱
2015-04-01 20:56:03
618
Android Material design设计风格
2016-11-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人