自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android 开发架构

热爱技术,热爱分享,加油,孤独的编程人

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

原创 让 Android Q 强制重启的 Project Mainline,到底是什么?

一. 序最新的 Android 版本 Q,已经发布了 Android Q Beta 3,虽然没有正式发布,但是不少用户已经加入了测试计划,抢先体验 Android Q 的新功能。近期不少体验用户反馈,自己的设备升级到 Beta 3 之后,会出现触不及防的强制重启。谷歌方面已经确认,是运行了 Project Mainline 这个在 Android Q 中新加入的功能导致。谷歌在确认的同时也表...

2019-05-31 14:19:39 3738 1

原创 探索 Android 平台的 CameraX

如果你曾经用过 Android 的 Camera APIs,你可能已经感受到了,它们一直没有成为最容易实现的东西。最开始是 Camera API,然后又推荐使用 Camera2 API — 这个升级是为了让开发者在使用 Android 的相机 API 时有更好的体验。然而,使用相机的 API (即使是最简单的使用)时还是会有很多脏代码,而且,在 Android 应用中要实现 Camera 功能时...

2019-05-30 21:23:16 468

原创 Android性能优化之启动优化

一、前言APP优化是我们进阶高级开发工程师的必经之路,而APP启动速度的优化,也是我们开启APP优化的第一步。用户在使用我们的软件时,交互最多最频繁的也就是APP的启动页面,如果启动页面加载过慢,很可能造成用户对我们APP的印象过差,进而消耗了用户的耐心,更严重可能导致用户的卸载行为。这也是微信始终坚持使用“一个小人望着地球”作为启动页面的背景,并且坚持不添加启动广告的的原因。二、APP的三...

2019-05-30 16:32:06 183

原创 聊聊Kotlin单例,从object单例,到带参数单例,论如何优雅的封装!

一. 序单例模式是我们在日常编程中,比较常用的设计模式。一个好的单例,必然需要满足唯一性和线程安全性。而 Java 中,关于单例的文章讲解已经很完善了,单例模式已经成为一种编程范式。在谷歌强推 Kotlin 的今天,不少人使用 Kotlin 时,还带着 Java 的编程思维,并没有有效的利用 Kotlin 的一些特性。如果还用 Java 的编程思想来写 Kotlin 的单例,会有种四不像的感...

2019-05-29 19:42:26 647

原创 React Native 中的状态栏(Android沉浸式)

在实际项目中,我们常常需要根据页面的不同去修改状态栏的表现。例如:页面头部图片延伸到状态栏下并且状态栏透明;状态栏的颜色和标题栏的颜色相同;状态栏内容颜色的深浅变化。在此之前,我写了一篇React Navigation 构建 Android 和 iOS 统一的 UI的文章,里面简单的说到了 Android 状态栏的一些设置。后来我发现并不是我想的那么简单,因此通过这篇博客进行补充,文中会更加详...

2019-05-29 16:13:52 1800 1

原创 Android嵌套滑动机制实战演练

前言最近产品提了个需求,要把商品列表做成类似淘宝的样式一般遇到这种需求,我们首先会想到的是,拦截TouchEvent,然后自己来处理滑动,这种方法虽然行得通,但是代码写起来非常恶心,且滑动冲突会比较多,使用NestedScrolling API会简单优雅很多。先上效果图API分析https://developer.android.com/reference/android/supp...

2019-05-28 16:16:48 208

原创 在原生App中嵌入Flutter

本文参考文档Add Flutter to existing apps。首先有一个可以运行的原生项目第一步:新建Flutter moduleTerminal进入到项目根目录,执行flutter create -t module ‘module名字’例如:flutter create -t module flutter-native执行完毕,就会发现项目目录下生成了一个module第二步:...

2019-05-28 15:16:38 1457

原创 听说你还在用工具类来判断网络状态?试试这个吧,像使用EventBus一样简单优雅

##基本操做,先举例在项目中总是会有需要判断网络状态的地方,我们常用的方法就是抽出一个工具类,我顺手就是一个例://判断网络是否可用public static boolean isNetworkAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) ...

2019-05-27 20:52:24 243

原创 使用Flutter仿写TikTok的手势交互

写在前面Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。Flutter官网:https://flutter-io.cn抖音,英文名TikTok,一款火遍全球的短视频App。在玩抖音的日子里,最令我感到舒服的就是抖音的手势交互,加上近期都在进行Flutte...

2019-05-27 15:51:06 321

原创 Android 合并AAR踩坑之旅

背景在输出Android模块时,有时会因为个别原因(比如来自业务的不可抗力),要求将模块打包成一个文件提供给接入方。这就意味着在输出模块由多个子模块组成的情况下,我们需要把多个AAR(或JAR)合并成一个大AAR输出,这个合并过程涉及到了很多有用的知识和难点,这篇文章就详细解析下其中的内容。首先来直观认识下AARAAR文件是一种Android归档包(类比Jar:Java Archive),这...

2019-05-24 17:37:31 3083 1

原创 Android 技术选型闲聊

技术决定下限,品味决定上限。技术好只能保证做出来的App不烂,品味好了才能将有限的技术发挥到极致,将所做App提升一个档次。网络框架Retrofit + RxJava + OkHttp这似乎没啥可说的,已经是主流了,而且非常好用。Retrofit充分利用注解的灵活性,以接口的形式配置来实现解耦。与后台沟通起来也非常方便,直接把api接口复制给他就成。RxJava简直是回不去的一个伟大产...

2019-05-23 21:02:55 348

原创 Android 侧滑菜单(侧滑删除)总结

侧滑菜单确实是一个比较常见的功能,其中场景较多的就是侧滑删除,它是iOS列表删除通用交互方式,比如微信、QQ、苹果自带的短信、通讯录列表等,都有侧滑删除功能。由于国内Android、iOS通常都是一套设计,因次,Android端怎么能少得了这个功能呢?Android 端实现起来确实稍显麻烦,它需要你掌握自定义View、属性动画、事件分发等一些比较深入的知识点。如果这些知识点你掌握得不错,那么实现一...

2019-05-22 16:59:43 2863

原创 看完感觉我 RecyclerView 白学了!

1、前言今天要说的那个东西其实大家都非常熟悉,那就是RecyclerView,没错大家都会用,但不知道对于RecyclerView的一些优化有多少人专门去研究过,不知道是不是一些开发者还只是停留在只会调用setadapter,然后配合notifyDataSetChanged这种万金油的方式上,又或者说是使用了一些优秀的三方库但是确只是简单停留在调用上就完事。其实RecyclerView做为an...

2019-05-22 15:51:00 225

转载 让JNI告诉你,你的应用为什么被卸载

/   前言   /Android Jni开发相信多数Android开发者都有所了解,但是网上很多教程分为两种,一种是告诉你如何配置NDK环境变量,建个helloWorld的Demo,另一种就是太过于高端,C语言一大片,云里雾里,虽然很多公司开发都会有单独的人员来写C,但是从Android开发人员角度来说,学习C还是很有必要的,一切源码终归C。这篇文章你...

2019-05-20 19:48:03 274

原创 入职阿里巴巴的正确姿势你需要了解下Android View的更新 requestLayout 与重绘 invalidate

在大家都了解过Android View的测量、布局、绘制机制后,我们来细化地分析一下关于View的重绘invalidate与更新requestLayout现象public class CustomEmptyView extends View { public CustomEmptyView(Context context) { super(context); }...

2019-05-20 16:53:26 186

原创 带你通俗理解https

前言个人原因最近要离开杭州了,接下来也不知道去哪,其实挺想去深圳发展,但是不知道行情怎么样,有没有深圳的老哥们,介绍一波,哈哈~好了,废话不多说,本文主要尝试着用简单的语言来解析下HTTPS的原理,或者说HTTPS的实现思想,但并不保证真正的实现过程,老哥们可以自行参考从一个例子说起背景假如你穿越回高中,你和你女朋友在教室遥远的对角落,只能通过传纸条来进行交流(不能直接说话,不然会被抓到...

2019-05-20 14:56:59 205

原创 零Flutter基础,四天完成Flutter简版玩Android客户端开发攻略

身为android开发者,在这几天深深感到flutter容易上手的特性,尤其是dart,稍微了解下基本语法,就能直接写,爽的一批~废话少说,先看成果Day0 环境搭建环境搭建很简单,就是下个 Flutter SDK,然后设置设置环境变量什么的就差不多了,我这里是按照 Flutter 中文网教程搭建,没遇到问题。附上地址:https://flutterchina.club/get-start...

2019-05-17 21:34:00 502

原创 阿里 Android 动态界面开发框架 Tangram,是时候了解一波了

熟悉阿里出品的vlayout的读者都知道,vlayout极大地扩展了RecyclerView的LayoutManager,从而为RecyclerView提供了一组布局。使用该开源项目,可以让我们在同一个RecyclerView里处理线性、网格等等各种复杂的布局。然而,使用vlayout时,一切都需要用Java代码实现,而且都是写在客户端上,一旦需要修改就必须发版,不是很灵活,于是阿里又提出了Ta...

2019-05-17 17:29:45 5483 2

原创 上两个月,15家面试,几个offer , 我的面试历程!

本人三年java工作经验,下面是这两个月的面试历程,分享给大家!1、新东方 03_19技术面试,两轮,地点:中关村地铁站E口,某大厦大厦6层,面试时间:2019_03_19_10:30(提前到了45分钟)1、自我介绍2、项目介绍3、LiveChat项目,第一个4、海南海航项目,第二个,最熟悉5、技术:数据库 mysqlmysql如何做主从/主主复制的,java程序如何操...

2019-05-16 21:13:35 384

原创 Android 基于 ViewGroup 实现流式布局

场景最近在做一个聊天功能,其中需要给对方打标签,第一时间想到的就是流式布局,目前项目上用的是鸿洋大神的FlowLayout,功能很强大,不过我项目上只用到了展示效果,读了大神的源码,给了我一些灵感,这里我也写一个FlowLayout,并且参考了一些Recycler.Adapter的做法。参考资料hongyangAndroid/FlowLayoutAndroid流式布局(FlowLayout...

2019-05-16 17:01:05 289

原创 Android 为了安全,又准备废弃一些功能!

一. 序前段时间写了篇文章,介绍 Android 的自动备份(allowBackup)属性,在国内的环境下,表现不可控,建议大家在发布版本的时候,通过修改属性的方式将自动备份的功能关掉 。当时还有人说,关掉这个属性会影响正常的功能,要是真有数据需要备份怎么办?要我说,真正重要的数据,肯定是有另外的保护机制,例如存云端、本地定期自主备份等。像在各大厂商魔改 ROM 的环境下,Backup 功...

2019-05-16 16:34:12 282

原创 Android进阶:三、这一次,我们用最详细的方式解析Android消息机制的源码

决定再写一次有关Handler的源码Handler源码解析一、创建Handler对象使用handler最简单的方式:直接new一个Handler的对象Handler handler = new Handler();所以我们来看看它的构造函数的源码:public Handler() { this(null, false); } public Han...

2019-05-15 21:00:56 173

原创 重磅来袭,GitHub 发布软件包管理服务!

2019 Build 大会刚结束两三天,微软旗下 GitHub 网站就面向开发者发布了一个重量级的包管理工具:GitHub Package Registry这个包管理服务工具与 GitHub 完美集成,作为源码的作者,从此你可以在 GitHub 平台发布和管理自己的公有或私有代码软件包,并只需一行代码就能远程依赖式使用,非常方便。同样的,还是由于与 GitHub 的完美继承, 作为源码的使...

2019-05-15 20:45:50 439

原创 Android进阶:二、从源码角度看透 HandlerThread 和 IntentService 本质

上篇文章我们讲日志的存储策略的时候用到了HandlerThread,它适合处理“多而小的任务”的耗时任务的时候,避免产生太多线程影响性能,那这个HandlerThread的原理到底是怎样的呢?我们现在从源码角度解读HandlerThread:继承自Thread,是一个可以使用Handler的Thread。因为在run方法内维护了一个Looper,可以通过Handler发送消息的方式,来通知...

2019-05-14 21:48:21 185

原创 Application 组件设计

为什么我要封装 applicationapplication 在以前是非常重要的一个地方,刚开始开发时我们会在 application 中存储数据,提供全局公共方法,application 虽然很方便,但是渐渐的我们还是放弃了在 application 里面做其他的工作,现在 application 主要的应用场景是:提供全局上下文对象管理 app 生命周期但是我在使用 app...

2019-05-14 16:39:36 243

原创 App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!

原文:承香墨影一、序在将 App 发布到市场之前,很重要的一个步骤就是为 APK 进行签名,大部分时候,这个操作隐藏在了打包的流程中,而不被我们注意到。签名的作用,除了证明 App 的所有权之外,还可以帮助 Android 市场和设备校验 APK 的正确性。Android 的签名是自证明的,并不会对证书进行 CA 认证。也就是我们可以使用工具自行生成签名证书,只要是一个格式正确的签名,...

2019-05-14 15:42:24 2277

原创 Android进阶:一、日志打印和保存策略

前言:项目开始没有做好日志统计工作,每次有问题后端都得找前端对接,严重影响工作效率。最近特地在项目中加上日志保存策略,在此分享,供需要的人学习。一.更详细的日志信息既然决定自定义一个log,那我们就可以让它显示更多的信息,如线程信息:threadId,threadName等:private String getFunctionName() { StackTraceEleme...

2019-05-13 22:10:41 221

原创 学最好的技术 进更好的公司 | 各大互联网公司技术分享

大家应该都有在网上阅读技术文章的习惯,以前我比较喜欢在 CSDN,不过现在改版的有点夸张,慢慢偏向于掘金,简书等平台…后来为了提升效率,我也搭建了 wanandroid.com,主要用于聚集一些比较好的技术文章,方便大家闲暇过程中学习。有一部分非常有价值的技术文章:各大公司对外开放的分享于是,利用这个周末利用放假时间,帮大家整理下目前我能找到的各大公司的对外分享网站。1. 腾讯gith...

2019-05-13 15:56:58 497

原创 即使不用饿了么订餐,也请务必收藏好该库!

由来Linkage-RecyclerView 是一款基于 MVP 架构开发的二级联动列表控件。它是因 “RxJava 魔法师” 这个项目的需求而存在。在最初寻遍了 GitHub 也没有找到合适的开源库(高度解耦、可远程依赖)之后,我决心研究参考现有开源项目关于二级联动的逻辑,并自己动手编写一个 高度解耦、轻松配置、可通过 maven 仓库远程依赖 的真正的第三方库。Linkage-Rec...

2019-05-13 15:32:53 466

原创 Android App Shortcuts——实现应用快捷方式

之前玩手机的时候偶然发现了一个效果,长按应用图标会显示出几个快捷方式(类似IOS系统的3D Touch功能),点击后可以直接进入相应的页面,不需要点击应用图标来启动应用,并且快捷方式可以放到桌面上单独显示,就像下图这样:索性就来研究一下这个效果是如何实现的,通过查阅网络上的资料,了解到该效果是通过Android 7.1(API level 25)版本的新特性***App Shortcuts**...

2019-05-13 15:24:05 1189

原创 Android8.1 源码修改之通过黑名单屏蔽系统短信功能和来电功能

前言之前写过一篇Android6.0 的屏蔽系统短信功能和来电功能,具体看这里同样的最近有个新需求,需要将8.1 设备的来电功能和短信功能都屏蔽掉,特殊产品就是特殊定制,那就开始吧。屏蔽短信功能还可沿用之前的6.0 处理方法, 在 SmsReceiverService.java 中 handleSmsReceived()中进行拦截分发但是想了想这次准备搞点不一样的,我...

2019-05-12 21:10:14 374

原创 Android AIDL 从入门到精通

AIDL 是 Android 特有的 IPC 进程间通讯方式AIDL 的写法其实和绑定服务的代码差不多,IBander 也是 android 默认提供的一个 AIDL 接口需要注意的是 5.0 之后,不能隐式启动 service,不能想以前一样定义 action 来启动服务了,尤其是不是跨应用启动服务,这也算是一种安全上的考虑若是想非常详细的了解 AIDL ,请看慕课网的科普视频AID...

2019-05-11 22:00:06 720

原创 Android Gradle 满满干货分享

Gradle介绍Gradle是一个基于JVM的新一代构建工具,可以用于自动化自定义有序的步骤来完成代码的编译、测试和打包等工作,让重复的步骤变得简单,用于实现项目自动化,是一种可编程的工具,你可以用代码来控制构建流程最终生成可交付的软件。构建工具可以帮助你创建一个重复的、可靠的、无需手动介入的、不依赖于特定操作系统和IDE的构建Gradle优势1.Gradle结合Ant和Maven等构建工具...

2019-05-10 16:44:01 248

原创 AAC 系列一】Android 应用架构新时代来临!

在 2017 年,Android 推出了 Android Jetpack,它是新一代组件、工具和架构指导,旨在加快 Android 应用开发速度。Android Jetpack 分为四大块:Architecture、UI、Foundationy 以及 Behavior,随着时间的增加,Android 团队在 Jetpack 又增添了许多组件,目前最新的版图如下。注意:2019 I/O 之后 ...

2019-05-10 16:29:34 434

原创 一统江湖!Flutter 终于走上覆盖全平台应用开发的道路

Google 接连放出大招,不得不说,今年的 I/O 大会有太多值得我们开发者关注的地方。上一篇文章提到 Kotlin 逆袭 java 语言,成为 Android Apps 首选开发编程语言,并将得到 Google 的大力扶持。这一篇要说说 Flutter 了,因为这个框架开始要一统江湖了。这次 I/O 大会上,Google 正式推出 Flutter 1.5 版本。至此,这个原...

2019-05-10 15:41:28 811

原创 彻底理解cookie、session、token

发展史1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。这段时间很嗨皮。2、但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些人...

2019-05-09 17:08:43 117

原创 Google 的野心,全平台支持的 Flutter!

一. 序在 Google I/O 2019 上,Dart 团队宣布推出新的 Flutter 稳定版本 1.5,这是 Flutter 迄今为止最大的一次版本发布。伴随着 Flutter 1.5 的发布,同期也宣布发布 Flutter for Web 的 Preview 版本,正式开启了 Flutter 的全平台 UI 框架之路。早在年初发布的 Flutter 2019 Roadmap 中,...

2019-05-09 15:00:00 515

原创 谷歌宣布 Kotlin 现在是 Android 开发的首选语言

在今日凌晨的 Google I/O 大会上,Google 官方正式宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。Java 占据 Android 开发绝对统治的时代一去不复返了。1 Kotlin,东宫太子谷歌今天宣布,Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言。谷歌在今天的声明中写道:“Android 的开发将越来越以 Kotl...

2019-05-09 14:48:37 2631

原创 2019Android设计模式总结

1.设计模式六大原则a.单一职责原则:就一个类来说,应该只有一个引起它变化的原因一个类做一件事情,避免职责过多。比如这种情况是不太好的,在一个Activity中既有bean文件,又有http请求,还有adapter等等,这就导致我们需要修改任何一个东西的时候都会导致Activity的改变,这样一来就有多个引起它变化的原因,不符合单一职责原则b.开放封闭原则:类,模块,函数应该是可以扩展的,但...

2019-05-09 14:17:06 267

原创 开挂般的面经:十面阿里,七面头条

过程先解释一下十面阿里,总共分为阿里云四面,蚂蚁两面,菜鸟四面;七面头条分为金融三面,抖音一面,效率工程三面;六个Offer分别是阿里、腾讯、头条、华为、蘑菇街、三七互娱。从二月份在牛客网看到阿里云的招聘贴就投了,那是我最早投递的公司,当时也没什么经验,导致表现得很糟糕,最后四面跪,当时伤心到谷底,幸好跪得比较早,跪了之后简历被释放掉,还可以继续内推。整个春招持续了4个月,对自己意志也是一个...

2019-05-08 15:42:38 448

空空如也

空空如也

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

TA关注的人

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