- 博客(42)
- 收藏
- 关注
转载 腾讯开源超实用的UI轮子库,我是轮子搬运工
QMUI_Android功能特性全局 UI 配置只需要修改一份配置表就可以调整 App 的全局样式,包括组件颜色、导航栏、对话框、列表等。一处修改,全局生效。丰富的 UI 控件提供丰富常用的 UI 控件,例如 BottomSheet、Tab、圆角 ImageView、下拉刷新等,使用方便灵活,并且支持自定义控件的样式。高效的工具方法提供高效的工具方法,包括设备信息、屏幕信息、键盘管...
2019-08-28 16:06:07 285
转载 再学一次ConstraintLayout 一些新特性
平时使用ConstraintLayout,断断续续的,基本都是在自己的小demo里面使用.公司的项目暂时还没有使用.这次公司项目需要大改,我决定用上这个nice的布局.减少嵌套(之前的老代码,实在是嵌套得太深了....无力吐槽).首先,ConstraintLayout是一个新的布局,它是直接继承自ViewGroup的,所以在兼容性方面是非常好的.官方称可以兼容到API 9.可以放心食用.一...
2019-08-27 17:02:31 170
转载 Android屏幕适配很难嘛?其实也就那么回事
前言作为一个Android开发人员,你还在为了适配各种尺寸的屏幕而苦恼吗?你还在为了出现一个新的机型而修改着数不尽的dimens和layout吗?你还在为了UI给的奇葩尺寸的设计图而绞尽奶汁计算距离吗?如果你为了这些事情而苦恼,那么看完这篇文章,希望可以帮你减少开发时间,减缓生命的流逝速度。不知道大家有没有看过前一段时间今日头条技术团队发表的一篇关于Android屏幕适配的文章:一种极低成本的...
2019-08-26 14:37:14 246
转载 性能优化(一)APP 启动优化(不敢说秒开,但是最终优化完真不到 1s)
简介性能优化的目的不是为了优化而优化,而且为了以后不再优化, 给自己统一 一个标准。这里也许会有人问 APP 启动还需要优化吗?启动又不是我们自己写的代码,难道 Google 工程师会犯这么低级的错吗?其实这还真不是 Google 的错,应该说是给我们开发者留了一个坑吧。应该有的同学知道是怎么一回事儿了,当我们在系统桌面任意点击一个 APP 是不是会发现启动的时候有一瞬间有白屏出现(以前老版本...
2019-08-23 15:26:24 407
转载 扯一扯HTTPS单向认证、双向认证、抓包原理、反抓包策略
HTTP(HyperText Transfer Protocol,超文本传输协议)被用于在Web浏览器和网站服务器之间传递信息,在TCP/IP中处于应用层。这里提一下TCP/IP的分层共分为四层:应用层、传输层、网络层、数据链路层; 分层的目的是:分层能够解耦,动态替换层内协议各个层包含的内容:应用层:向用户提供应用服务时的通讯活动(ftp,dns,http)传输层:网络连接中两台计算机的数据...
2019-08-21 17:46:07 243
转载 最好用的安卓按钮
背景按钮应该是我们的App里面最普遍的组件之一了,特别常用。通常我们写一个按钮的套路很简单也很固定。大概分为以下几个步骤:在xml布局里面按照设计稿的尺寸位置写一个Textview按照设计稿规定的颜色和圆角在drawable目录下创建一个shape文件将这个shape文件作为Textview的背景这样一个很标准的按钮就诞生了,然后就可以继续愉快的开发了。这本来没有什么问题,...
2019-08-19 17:17:01 122
转载 开发过程中项目是否需要重构?又需要注意什么?
重构是需要慎重考虑的,不是拍脑子决定的事情!一、引言程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的一切推倒重来。是的,他们觉得旧代码异常混乱,因为读代码更难,宁愿丢掉旧代码重新写,也不愿意修修补补,他们认为旧代码简直一团糟。我觉得这个出发点是好的,但我观察了非常多的案子,那些重构的项目大多数是失败的,相当一部份都成了烂尾。他们从头开始再写一遍并不意味着会写...
2019-08-15 17:07:09 443
转载 架构进阶,Dagger2的原理及使用详解
目录一:Dagger2是什么?二:为什么要有Dagger2三:Dagger2如何使用基本的概念如何使用Dagger2高级用法(1)构造方法需要其他参数时候(2) 模块之间的依赖关系(3) @Named注解使用(4) @Singleton注解(5)自定义Scoped(6)Subcomponent(7)lazy 和 Provider四: MVP + Dagger2Ps:...
2019-08-14 17:11:54 158
转载 在Android项目中接入Flutter,在Flutter使用安卓布局
开头在flutter开发中,始终会有下面两个无法避免的问题:原生项目往flutter迁移,就需要在原生项目中接入flutterflutter项目中要使用到一些比较成熟的应用,就无法避免去用到原生的各种成熟库,比如音视频之类的这篇文章,将会对上面两种情况,分别进行介绍在Android中接入flutter界面在android项目中需要将flutter以module的形式接入创建flu...
2019-08-13 17:28:06 543
转载 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求
前言最近一直在修炼Kotlin,说实话真香真好用,刚好公司准备交给我一个新项目,于是打算直接用Kotlin来构建项目。刚好整体架构搭建完毕了,于是把网络请求这一部分先分享给大家。这次使用到的是 协程+ retrofit +mvvm的模式,我这儿直接用一个简单的demo来看一下具体的实现方式吧。文章只是描述实现思路,需要demo的直接跳到文末。项目配置首先先引入所需要的依赖implemen...
2019-08-12 15:14:11 1006
转载 Flutter实现抽屉动画
这篇会深化View拖拽实例,利用Flutter Animation、插值器以及AnimatedBuilder教大家实现带动画的抽屉效果。先来看效果:通过构思,我们可以设想到实现抽屉的方式就是用Stack控件将两个Widget叠加显示,用GestureDetector监听手势滑动,动态移动顶层的Widget,当监听到手势结束的时候根据手势滑动的距离动态将顶部Widget利用动画效果滑动到结束位置...
2019-08-09 17:27:16 234
转载 Android打包之多版本、多环境、多渠道
在平时的Android开发中,我们经常会遇到在不同网络环境(比如:开发环境、测试环境)之间的切换、一次打多个渠道包等需求,如何优雅的管理网络环境的配置?如何快速的打出多个渠道包?这是一个值得研究的问题。如果每一次在不同网络环境间切换,都需要更改代码,然而重新打包,那未免有点低效。下面是我的实践探索,看网上很多人都是根据buildType来切换网络环境,感觉有点不好,因为网络环境可能很多种,而...
2019-08-08 16:21:12 227
转载 Flutter之撸一个漂亮的登录界面的总结
介绍最近学习了Flutter的一些控件使用,然后在Github上面看见了一个挺漂亮的登录界面,于是就用Flutter自己模仿地实现了一下。原作者做得比较好看,不过只是单纯实现界面。所以自己加了些东西,比如Key的使用和InheritedWidget的使用。下面是一些总结,如果有说错的地方,还请各位指出来,谢谢。最终的展示界面代码结构每个类的名字,相信大家一看就知道对应的作用类。每个...
2019-08-06 17:37:18 419
转载 Flutter自定义主题并切换保存
现在越来越多的应用程序支持黑/白主题切换了,在Flutter中更是简单,Flutter库中提供了ThemeData.dark和Theme.light两个默认主题。在main.dart初始化MaterialApp的时候直接设置进去即可MaterialApp( title: 'Flutter Demo', theme: ThemeData.light(), hom...
2019-08-04 14:43:13 581
转载 手写消息总线LiveDataBus,让你永无后顾之忧
做了很久的面试专题,不知道对各位需要面试和有跳槽想法的小伙伴有没有帮助,今天收集一篇关于LiveDataBus方面的文章,面试方面的收集,后续我还会持续更新如果觉得有用可以点个关注Android四大组件和线程间通信方式有很多,比如Handler管道、广播、接口回调、rxBus、EventBus等,但是这些方式都存在一些瑕疵,(比如EvebtBus可能现在用的人比较少了,个人见解可以能算半个过...
2019-08-03 15:17:36 161
转载 Android应用架构演变
引言总结了多年的移动开发经验,特别是在Android端的积累,以前认为从移动端APP谈架构,其实有点举大旗,因为大部份项目都在做业务理,且往往不是很大,并没有多复杂的数据处理或高并发(只针对个人而言);并且长期认为架构这个词,用在Web端或者大型系统里比较好一点,好的架构好,意味系统更稳健、高效率, 更大体量。总之,有种大材小用的感觉,然而,随着Android应用开发规模的扩大,客户端业务逻辑也...
2019-08-02 14:13:39 172
转载 Android 高质量开发之存储优化
数据的交互及存储是任何开发都绕不过的事情,Android平台涉及数据存储有:SharedPreferences存储数据、文件存储数据、SQLite数据库存储数据、使用ContentProvider存储数据、网络存储数据一、引言Android 提供了很多种持久化存储的方案,存储就是把特定的数据结构转化成可以被记录和还原的格式,这个数据格式可以是二进制的,也可以是 XML、JSON、Prot...
2019-07-30 16:51:21 192
转载 腾讯面试:增量升级为什么减少升级代价,增量升级原理
在前几年,整体移动网络环境相比现在差很多,加之流量费用又相对较高,因此每当我们发布新版本的时候,一些用户升级并不是很积极,这就造成了新版本的升级率并不高。而google为了解决了这个问题,提出了Smart App Update,即增量更新(也叫做差分升级)。尽管现在网络环境有了很大的提升,但一个不争的事实就是应用越做越大,因此,增量更新在目前的仍然是一种解决APP更新包过大的有效方案。今天,我们...
2019-07-29 15:56:13 219
转载 教你如何轻松发布私有 App
不论你的团队拥有 5 个还是 100 个 App,你总能找到帮你管理 Play Store 列表的自动化工具。Google Play 允许你通过其开发者 API 来管理你的 Play Store 列表、打包好的 APK 等。2017 年 1 月的时候,Google 从 Twitter 收购了名为 Fabric 的开发者套件,其中包含了可以自动化截图、管理测试版部署、签名并将 App 推送到 Pla...
2019-07-26 15:43:35 321
转载 Android人脸识别app——基于Face++,MVP+Retofit+RxJava+Dagger
前言最近公司项目比较空,花了点时间写了个人脸识别的app,可以查看你的性别、年龄、颜值、情绪等信息,利用的是 Face++ 的人脸识别API。本项目采用了 MVP 的架构,使用了 Retrofit、RxJava、Dagger、EventBus 等框架进行开发和解耦,利用 MaterialDesign 进行UI上的布局设计。主要的功能就是拍照,然后将照片传至 Face++ 服务器,进行人脸识别,...
2019-07-25 20:57:00 618
转载 200行代码打造超越一线互联网公司的换肤架构
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注面试官: 网易云QQ的换肤是怎么做到的,你对换肤有了解吗?看过换肤的原理没?心理分析:没有接触过换肤技术 第一次听到该名词肯定会很茫然。面试官考的是对资源加载,监听布局,有没有了解.本文从换肤实战一对一讲解。告诉你如何做以及实现。文章末尾带换肤项目源码求职者: 从监听布局开始到 换肤原理,详细给面试官讲解换肤的原理...
2019-07-24 17:31:50 174
转载 腾讯Android面试:Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么
面试官: Handler中有Loop死循环,为什么没有阻塞主线程,原理是什么心理分析:该问题很难被考到,但是如果一旦问到,100%会回答不上来。开发者很难注意到一个主线程的四循环居然没有阻塞住主线程求职者:应该从 主线程的消息循环机制 与Linux的循环异步等待作用讲起。最后将handle引起的内存泄漏,内存泄漏一定是一个加分项先上一份整理好的面试目录前言Android的消息机制主要...
2019-07-23 17:01:58 176
转载 还不懂Binder的原理?你损失了一张腾讯offer
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注先上一份BATJ系列面试文的面试目录腾讯面试官 :谈一谈Binder的原理和实现一次拷贝的流程心理分析 :能问出该问题,面试官对binder的理解是非常深入的。想问求职者对Android底层有没有深入理解求职者:应该从linux进程通信原理的两次拷贝说起,然后引申为什么binder却只有一次拷贝 ,最后阐...
2019-07-22 16:24:16 128
转载 阿里巴巴 说说 Android 虚拟机Dalvik与ART区别在哪里?
本专栏专注分享大型Bat面试知识,后续会持续更新,喜欢的话麻烦点击一个关注废话不多说先上面试目录Android开发中我们接触的是与Java虚拟机类似的Dalvik虚拟机和ART虚拟机,下面梳理一下三者区别和原理:一,Dalvik虚拟机 Dalvik虚拟机( Dalvik Virtual Machine ),简称Dalvik VM或者DVM。Dalvik 发音有道词典并没有收录。说说来历...
2019-07-18 20:24:20 133
转载 Android进阶:自定义视频播放器开发(上)
随着快手,抖音,西瓜视频等视频APP的崛起,视频播放已经成为主流,此时作为Android研发的你,想要提高自己的能力还不知道怎么开发视频播放器怎么行?所以今天就带着大家一起开发一个简易播放器:SmallVideoPlayer需求分析我们观察一个视频播放器,可以看到视频播放器除了正在播放的视频还有很多控件,比如播放按钮,暂停按钮,播放进度条,播放计时器等。这么多控件显然无法播放视频,但是他们...
2019-07-16 14:39:10 313
转载 用 Flutter 实现 PageView 指示器
本篇用一个PageView的实例来加深印象,并且在之后的专栏里,我们会深化这个示例,做成一个支持上下左右无限滑动的图片Banner,并且教你如何把他做成Dart library并且开放给其他人使用。一.无限滑动的PageView在实现PageView指示器之前,咱们需要先实现一个PageView。在Flutter中实现一个PageView很简单。class BannerGalleryWidg...
2019-07-15 17:46:29 603
转载 2019Android74道高级面试合集(含BAT字节跳动等等)
前言最近半年,常常有人问我 “Android就业市场究竟怎么样,我还能不能坚持下去 ?”现在想想,移动互联网的发展不知不觉已经十多年了,Mobile First 也已经变成了 AI First。换句话说,我们已经不再是“风口上的猪”。移动开发的光环和溢价开始慢慢消失,并且正在向 AI、区块链等新的领域转移。移动开发的新鲜血液也已经变少,最明显的是国内应届生都纷纷涌向了 AI 方向。 可以说...
2019-07-11 15:38:32 119
转载 Flutter 插件开发:以微信SDK为例
就像 React Native 一样,在 Flutter 应用中,如果需要调用第三方库的方法或者有一些功能需要使用原生的开发来提供,使用 Flutter Plugin 是一种不错的方式,它本质上就是一个 Dart Package,但与其它的 package 不同点在于,Flutter 插件中一般都存在两个特殊的文件夹:android 与 ios,如果需要编写Java、Kotlin或者 Object...
2019-07-10 16:50:34 1041
转载 Android进阶 自定义视频播放器
随着快手,抖音,西瓜视频等视频APP的崛起,视频播放已经成为主流,此时作为Android研发的你,想要提高自己的能力还不知道怎么开发视频播放器怎么行?所以今天就带着大家一起开发一个简易播放器:SmallVideoPlayer一.需求分析我们观察一个视频播放器,可以看到视频播放器除了正在播放的视频还有很多控件,比如播放按钮,暂停按钮,播放进度条,播放计时器等。这么多控件显然无法播放视频,但是...
2019-07-09 21:39:02 130
转载 理解Android虚拟机体系结构
1 什么是Dalvik虚拟机Dalvik是Google公司自己设计用于Android平台的Java虚拟机,它是Android平台的重要组成部分,支持dex格式(Dalvik Executable)的Java应用程序的运行。dex格式是专门为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Google对其进行了特定的优化,使得Dalvik具有高效、简洁、节省资源的特点。从Andro...
2019-07-08 17:17:07 110
转载 熟悉Android打包编译的流程
从事Android高级研发,怎能不知道Android的打包流程呢?今天就为大家讲解Android打包的流程:Android 构建系统编译应用资源和源代码,然后将它们打包成可测试、部署、签署和分发的 APK。一般使用 Android Studio开发的时候使用Gradle构建工具包来自动执行和管理构建流程,同时也可以灵活地自定义构建配置。Gradle 和 Android 插件独立于 Androi...
2019-07-05 17:26:06 84
转载 android bitmap的缓存策略
在这篇文章中:lrucachedisklrucache缓存策略对比与总结不论是android还是ios设备,流量对于用户而言都是宝贵的。在没有wifi的场景下,如果加载批量的图片消耗用户过多流量,被其知晓,又要被念叨一波~如何避免消耗过多的流量呢?当程序第一次从网络加载图片后,就将其缓存到移动设备上,这样再次使用这个图片时,就不用再次从网络上下载为用户节省了...
2019-07-04 19:46:19 61
转载 由浅到深,深入分析APP卡顿和优化
从这篇文章中你能获得这些料:知道setContentView()之后发生了什么?知道Android究竟是如何在屏幕上显示我们期望的画面的?对Android的视图架构有整体把握。学会从根源处分析画面卡顿的原因。掌握如何编写一个流畅的App的技巧。从源码中学习Android的细想。收获两张自制图,帮助你理解Android的视图架构。文末有资料大纲一.从setContentV...
2019-07-03 17:54:12 97
转载 Android进阶:自定义类加载器加载加密类文件
之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点。而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等。其实笔者对类加密比较感兴趣,就稍稍调研了一下。类加密的其实是为了防止APP被反编译,防止反编译的方法有很多种,比如混淆,加固等。自己对类文件进行加密,并自定义类加载器也是一种办法:首先我们的代码打包编译之后会变成难...
2019-07-02 15:13:13 101
转载 2019中级Android开发面试解答之Handler
注:因为实际开发与参考答案会有所不同,再者怕误导大家,所以这些面试题答案还是自己去理解!面试官会针对简历中提到的知识点由浅入深提问,所以不要背答案,多理解。Handler1.谈谈消息机制Handler作用 ?有哪些要素 ?流程是怎样的 ?参考回答:负责跨线程通信,这是因为在主线程不能做耗时操作,而子线程不能更新UI,所以当子线程中进行耗时操作后需要更新UI时,通过Handler将有关U...
2019-07-01 15:19:06 216
转载 Android activity之间传值
当对Android有一些了解后,不难发现,Android程序UI框架接近于Web页面的概念。每一个用于呈现页面的组件,Activity,都是彼此独立的,它们通过系统核心来调度整合,彼此之间的通过Intent机制来串联。每一种架构都会有其利弊,Android当然也不能超然脱俗。由于Activity之间的松耦合关系,使得其复用能力特别的出色,Mash-Up方式可以有效的提高开发效率。但另一方面,由于...
2019-06-28 16:55:04 153
转载 在子线程中直接使用 Toast 及其原理
一般我们都把Toast当做一个UI控件在主线程显示。但是有时候非想在子线程中显示Toast,就会使用Handler切换到主线程显示。但是子线程中真的不能直接显示Toast吗?答案是:当然可以。那应该怎么操作呢?在当前线程中先初始化一个Looper即可!Looper.prepare();Toast.makeText(getBaseContext(), "text", Toast.LENGT...
2019-06-27 17:01:32 1136
转载 Android进阶:RxJava2 源码解析 1
本文适合使用过Rxjava2或者了解Rxjava2的基本用法的同学阅读一.Rxjava是什么Rxjava在GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的...
2019-06-26 15:23:24 83
转载 Android视图动画-View Animation
视图动画主要有两种:一、Tween Animation译为“补间动画”1、scale译为“规模、比例”,是对View进行特定范围的缩放2、alpha通过改变View的透明度实现View隐现的效果3、translate译为"转移",是对View进行位置的移动4、rotate译为“旋转”,是让View围绕特定的点进行旋转PS:所有View的移动、隐藏、旋转仅仅是看到的动画效果,实际View的位置/...
2019-06-25 16:37:22 112
转载 通过EventBus框架GET大牛的框架思维
EventBus的作用Android中存在各种通信场景,如Activity之间的跳转,Activity与Fragment以及其他组件之间的交互,以及在某个耗时操作(如请求网络)之后的callback回调等,互相之之间往往需要持有对方的引用,每个场景的写法也有差异,导致耦合性较高且不便维护。以Activity和Fragment的通信为例,官方做法是实现一个接口,然后持有对方的引用,再强行转成接口类...
2019-06-24 14:49:10 82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人