自定义博客皮肤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 开发架构

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

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

原创 Android 应用广告过滤几种方式

前言说起网页广告,那真是让人又恨又爱,它们不但占用了网页的可视控件,分散用户的注意力,还有些浮动广告干扰甚至误导用户操作。但是广告又是开发者重要的收入来源之一,比如我们在做浏览器的同时需要接入新的广告,同时又要过滤掉网页中的广告,这就是一个很正常的现象。说起应用广告过滤对于PC端来说可能更方便,网上有大量各种广告过滤插件。但对于Android等移动端来说就不那么友好了。Android应用的广告过...

2019-08-23 10:55:19 1609 1

原创 到底怎样写 try-catch,才能称之为高手?

try-catch,一个大家最常见不过的语法,但是有些人却用不好。当面对一个崩溃的时候,不管三七二十一先catch住再说,没错,老崩溃是被catch住了,但是新崩溃又出现了,想想都是坑啊,本文就和大家探讨下这个话题,此外买一送一,再和大家探讨下空指针异常。乱用try-catch写过C++的人都知道,那异常捕获特别不好用,甚至有些异常还捕获不了,在Java中,try-catch特别好使,如果一个...

2019-08-23 10:50:32 190

原创 RecyclerView 实现吸底效果,这个必须要会啊

这些天遇到一个列表数据吸底需求,如果不满一屏就全部展示,如果超过一屏就让底部悬浮在屏幕底部。大概效果如下图:列表我们一般用RecyclerView来实现,关于底部悬浮这里有两种实现方法,一种是通过测量RecyclerView内容高度,另一种是用我们熟悉的ItemDecoration来实现。下面就具体介绍这两种实现方式。测量RecyclerView内容高度实现这种方式很直观,我们先获取R...

2019-08-23 10:37:35 470

原创 Android项目实现Module目录结构分组

一、背景项目需求的频繁迭代,新的产品功能在不断添加和延伸,随之带来的是,项目技术复杂度的提升。近几年来,Android模块化、组件化相关技术得到极速发展,将项目整体进行分层,不同的层次之间依据实际的技术功能或业务支撑或业务模块去划分具体的组件或模块,是组件化或模块化一致的行动方向。复杂的产品功能,往往也带来组件化或模块后具有多个组件或模块。对于相对稳定,或具有复用能力的模块,可以直接形成独立的模...

2019-08-22 10:24:59 1504

原创 混合开发时,启用flutter的热加载功能

单纯的flutter项目时,是可以热加载的。但是,当和原生一起混合开发时,热加载功能失效了。下面来解决这个问题:1、确定电脑打开了一个以上的模拟器,或者手机连接了电脑2、打开的模拟器或者手机杀掉混合开发的应用程序进程3、flutter项目根目录下执行命令:flutter attach注意是在flutter根目录下,不是混合开发的项目根目录`例如,下图是在红框的目录下执行flutte...

2019-08-22 10:17:52 323

原创 将20M文件从30秒压缩到1秒,我是如何做到的?

压缩20M文件从30秒到1秒的优化过程有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用,但是随着前端所传图片的大小越来越大的时候,耗费的时间也在急剧增加,最后测了一下压缩20M的文件竟然需要30秒的时间。压缩文件的代码如下。这里找了一张2M大小的图片,并且...

2019-08-22 10:10:13 216 1

原创 HashMap 如何解决冲突?扩容机制?

正文我们来看看HashMap的put数据的时候,是怎么处理的:/** * Implements Map.put and related methods * * @param hash hash for key * @param key the key * @param value the value to put * @param o...

2019-08-21 10:56:04 572

原创 说一道字节跳动的算法题 | Android 向

一. 审题面试题:给定一个 RootView,打印其内 View Tree 的每个 View。在 Android 下,UI 的布局结构,对标到数据结构中,本质就是一个由 View 和 ViewGroup 组成的多叉树结构。其中 View 只能作为叶子节点,而 ViewGroup 是可以存在子节点的。上图就是一个典型的 ViewTree 的结构,而想要遍历这个 ViewTree,还需要用...

2019-08-21 10:50:57 621

原创 是时候让 Android Tools 属性拯救你了

日常开发过程中,我们都会遇到这样一种场景:我们写出的 UI 效果在对接数据之前需要提前进行预览,进而调整  UI 细节和排版问题。我们一般的做法是什么样的?如果存在像 TextView 或者 ImageView 这种基础控件,你是不是还在通过诸如 android:text="xxx" 和android:src="@drawabl...

2019-08-21 10:33:47 1050

原创 给你的Android应用穿件花衣服吧!

/   前言   /ColorPicker,颜色选取器,简称拾色器。 说到拾色器,大家可能就会想到Photoshop, 使用得最多的应该是设计, 对于开发而言,平常要用到拾色器的机会不多。 如果有一天,项目中需要一个拾色器(多用于自定义颜色),该如何入手?今天且来给大家分享一下拾色器的设计和实现。/   颜色空间  &nbsp...

2019-08-20 10:31:47 185

原创 看完此文,你对Gradle的理解又升级了!

1.Android签名文件配置在一般公司中,当团队比较小的时候,App的签名信息都是放到项目中的,甚至会上传到github上,这样做很是方便。但随着团队人数的增多,这样做的风险会越来越大,因为签名信息是重要的资源,这样就不能将签名上传到github上,也就不应该在build.gradle中直接配置签名。主要有以下的几种解决方法:1.自定义一个签名配置文件2.本地~/.gradle/grad...

2019-08-20 10:19:23 647

原创 探索 Flutter 异步消息的实现

一、简介我们在进行 Android 开发的时候,会通过创建一个 Handler 并调用其 sendMessage  或 Post 方法来进行异步消息调用,其背后涉及到了三个面试经常被问的类:Handler,Looper,MessageQueue,内部原理我想做过 Android 开发的基本都了解。Flutter 使用 dart 开发,其也有类似的异步消息机制,具体参见这篇文章:htt...

2019-08-20 10:02:36 513

原创 “中台战略”在 Android 客户端的落地实践

导读在编程界,一般会根据工作内容,把开发人员分成前端、客户端、后台这三类。现在“中台”这提法很响亮,直观感觉是,难道这是一项新的工作内容,后续分类变成前端、客户端、中台、后台么?其实不然,中台不是一种具体的工作内容,而是一种思想。背景介绍说到中台,不得不提Supercell这个公司,这是一家位于芬兰赫尔辛基的移动游戏公司,号称世界上最成功的移动游戏公司,2016年6月,腾讯以86亿美元收购了...

2019-08-19 11:03:57 782

原创 Android Q Beta 6 终极测试版发布!

前言当今手机市场可谓是百花齐放,但手机系统却屈指可数,其中Android和iOS就占据了整个手机系统市场的99%,单单Android就占据了整个手机系统市场的86%,可谓是占据绝对优势。其中,Android的更新速度要比iOS更快,系统的功能也更加丰富多样。从推出至今,Android已经发布更迭了10个系统版本。Android Q Beta 6 已发布,这是 Android Q 的最后一...

2019-08-19 10:57:15 449

原创 Android 高质量开发之崩溃优化

前言开发人员碰到 APP 崩溃(闪退)什么办?不少人会说根据 Log,找到闪退的代码,捕获异常,“消化”掉了所有 Java 崩溃。至于程序是否会出现其他异常表现,那是上帝要管的事情。是的,这种方法对于紧急情况下不失为一种解决办法,但闪退的真相是什么?是否从根源上解决问题呢?一、崩溃崩溃率是衡量一个应用质量高低的基本指标,那么,该怎样客观地衡量崩溃这个指标,以及又该如何看待和崩溃相关的稳定性。...

2019-08-19 10:43:07 175

原创 Flutter 与原生交互总结

Flutter学习诀窍,Flutter一切皆组件!Android与Flutter之间的通信共有四种实现方式。由于在初始化flutter页面时会传递一个字符串——route,因此我们就可以拿route来做文章,传递自己想要传递的数据。该种方式仅支持单向数据传递且数据类型只能为字符串,无返回值。通过EventChannel来实现,EventChannel仅支持数据单向传递,无返回值。通过Me...

2019-08-16 16:16:36 264

原创 带你掌握一款多特效的智能loadingView

先上效果图:1、登录效果展示2、关注效果展示1、【画圆角矩形】画图首先是onDraw方法(我会把圆代码写上,一步一步剖析):首先在view中定义个属性:private RectF rectf = new RectF();//可以理解为,装载控件按钮的区域rectf.left = current_left;rectf.top = 0; //(这2点确定空间区域左上角,cur...

2019-08-16 15:56:25 215

原创 Activity 过渡动画 — 让切换更加炫酷

介绍在 android5.0 以上版本中,google 为我们提供了几种 activity 切换的过渡动画,目的是为了让 activity 切换转场更加美观,而在 android5.0 之前的 activity 切换显得生硬。虽然可以自定义给 activity 增添动画效果,但是效果也不尽如意。而 androi5.x 提供的切换动画就显得非常自然,而且容易使用。现在我们来看看 androi5.x...

2019-08-16 15:41:09 2488

原创 高仿微信底部导航栏动画

微信自发布以来,底部导航栏的动画一直让开发者津津乐道,而且伴随着版本更新,底部导航栏的动画也一直在改进。最近有人问我,微信的最新版本的底部导航栏的动画的原理是什么。闲暇之余,我仔细瞅了瞅最新版本的微信,底部的动画非常可谓非常之有意思,这也是这篇文章的由来。我想大家都安装有微信,大家可以自己看看自己手机上微信的底部导航栏的动画效果,然后再对比看看我实现的效果(如下图),几乎是一毛一样。原理首先,...

2019-08-15 14:29:26 488

原创 小程序如何生成海报分享朋友圈

小程序开发必备技能啊…项目需求写完有一段时间了,但是还是想回过来总结一下,一是对项目的回顾优化等,二是对坑的地方做个记录,避免以后遇到类似的问题。需求利用微信强大的社交能力通过小程序达到裂变的目的,拉取新用户。生成的海报如下:需求分析1、利用小程序官方提供的api可以直接分享转发到微信群打开小程序2、利用小程序生成海报保存图片到相册分享到朋友圈,用户长按识别二维码关注公众号或者打开小程...

2019-08-15 14:23:56 569

原创 Android Span详解

引子Android中的Span之前用的很少,接触多了以后,发现Span还是相当有趣的。Span的命名即使不是最差劲的,也是最差劲的之一吧,第一眼看去完全不知道这个类是干嘛的

2019-08-15 14:05:28 1088

原创 代码洁癖症的我,学习 Lint 学到心态爆炸

前言以前对下面的问题,我的态度是,不报错就是没问题,报错就用快捷键,根据Android Studio提示修复问题,从来不去问个为什么?现在代码洁癖症越来越严重的我,忍不住想看清什么东西在搞鬼。认真看完本文,一定可以学到最新的知识。就算看不下去,也要点个赞收藏,绝对不亏。本文并不是吐槽Lint的不好,而是在学习Lint过程碰到问题,心态是奔溃的,以及解决每个问题带来的喜感。不知道大家有没有注意...

2019-08-14 14:47:43 194

原创 Glide 架构设计艺术

自从Android诞生以来,Bitmap的管理就一直是大问题,为了更好的管理它,不同的图片加载框架不断的被推出,从刚开始的ImageLoader,到Picasso,再到现在的Fresco和Glide,可谓百花齐放。然而前两者现在都已经不再维护了,同时我们公司的项目目前也已经从Fresco切换到Glide了,之前之所以用Fresco是因为他在Android5.0以下系统中能从native层“偷”内存...

2019-08-14 14:22:41 149

原创 即刻App详情页滑动效果,SlideLayout双列表页面实现

即刻 5.3 版本的时候,随着圈子详情页的内容越来越丰富,之前的页面结构已经不能满足我们的需求,需要一个新的布局方案承载各种圈子元素并满足我们的自定义交互。改版前改版前的结构比较简单,头部显示圈子的基本信息比如图片、标题和简介等信息,底部展示圈子内的消息列表,向上滑动可折叠头部区域让用户更加专注地浏览消息列表,结构如下:CoordinatorLayout 作为容器负责两部分的布...

2019-08-14 14:12:15 748 1

原创 字节跳动,野心十足,十年有可能打败腾讯成为第二个互联网巨头吗?

字节跳动是近几年迅速升起的互联网公司,成立于2012年,是最早将人工智能应用于移动互联网场景的科技企业之一,迄今为止,已超过750亿美金市值。 风云变化,更新换代,曾经的互联网三巨头BAT,已经被后浪推翻。就以目前的情况来看,未来十年,字节跳动有没有可能打败腾讯成为第二大互联网公司呢?讲真的,这一下子有点难以判断,但是仔细分析也能说出个一二三四。我们来看一下字节跳动和腾讯的大概情况。1 字节跳...

2019-08-13 21:17:12 1419

原创 生还是死?Android 进程优先级详解

前言让我们面对现实:移动设备上没有无限的内存、无限的电池或者其它无限的资源。这对应用而言意味着你应该把进程死亡作为应用生命周期的一个自然过程对待。最重要的是确保杀死进程及内存回收不会对用户造成负面影响。事实上,Android 中的多数进程架构都是为了确保特定的顺序而特别设计的,并按重要性层次遵循一组模式。Android 进程层次你会发现最重要的进程被称为前台进程,然后依次是任何可见进程、...

2019-08-13 20:40:31 393

原创 Android 装逼技术之暗码启动应用

什么是暗码?在拨号盘中输入*#*#<code>#*#*后,APP 可以监控到这些输入,然后做相应的动作,比如启动应用,是不是有点骚。下面看下这个骚操作是如何实现的。效果预览源码DialtactsActivity#showDialpadFragmentDialtactsActivity 中有个 showDialpadFragment 方法,用来加载显示拨号盘,因此入口就从 ...

2019-08-12 21:29:49 266

原创 初探:Java虚拟机那点破事

前言从学习Java的第一天开始,到如今工作当中,想必大家都耳闻目染了各种Java的优点。其中肯定少不了:Java有虚拟机,java是跨平台的,一次编译到处运行。在相当长的一段时间里对此观点都只是一个很模糊的概念,对自己写的代码也有一种吃不透的感觉。犹如一只拦路的大老虎,望而生畏,止步不前。一番思量,一日不解决掉,对技术难以有更深层次的理解,只好硬着头皮上。不能跨平台的原因是怎样造成的?2.1...

2019-08-12 21:11:35 280

原创 重磅!2019年,开发语言新姿势汇总

前言我们在总结过去的同时,也要展望一下未来,来规划一下今年要学哪些新技术。这几年优秀Android的开源库不断推出,新技术层出不穷,需要我们不断去了解和掌握,在提高自身开发水平的同时,我们需要付出更多学习精力和时间。俗话说,打铁还需自身硬,为了在这个日新月异的技术时代为了生存不被淘汰,必须要求自身掌握的技术不断跟进时代脚步,所以我们必须付出才能得到回报,说没有时间去学习的人永远都会有找不完...

2019-08-12 21:06:59 307

原创 开发部署提速8倍!这款IDE插件了解一下?

对于开发者而言,提高工作效率大概有 2 种主要方式,第一种方式就是加快自己的工作速度,争取在同一段时间内多码一些代码、多干一些活来实现多产;而聪明的开发者会选择第二种方式,就是通过插件,让一些重复性的、繁琐性的工作被自动化,从而节省出时间来做一些实质性的业务,达到轻松又高效的工作步调。最近通过发布会直播,了解到一款本地 IDE 插件——Cloud Toolkit,就是通过第二种方式来提高开发者的工...

2019-08-11 20:44:28 2708

原创 漩涡理论

记得高中时候,外面书店常常会有一些报纸和书籍,关于黑洞理论的书籍很多,这个吸引到我。让我没事闲着就买来看看,其实要说喜欢技术,那很鬼扯的,喜欢的理由第一是那些图片很好看,第二是可以扯淡用。买了霍金的《时间简史》《虫洞》,目的都是瞎玩,大家一起讨论用的。不过有个东西我自己非常喜欢,就是时空扭曲,我很喜欢时空转换,不时地举例来说,我们平时都知道杠杆原理,找个支点省力,用更远的距离来省力,实际就是...

2019-08-06 15:21:08 293

转载 Java 世界里的垃圾回收规则你搞懂了吗?

之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。

2019-08-06 15:19:25 186

原创 比 EventBus 更高效的事件总线(BusUtils)

背景设计这个 BusUtils 其实是在做 ApiUtils 时顺手做的,因为两者实现方式基本一致,设计前我也没想着要和 greenrobot 的 EventBus 一较高低,但设计完总需要一个对比,所以就拿业界最优秀的事件总线 EventBus 比较一下吧,然后就发现我这区区 300 行不到的 BusUtils 性能比 EventBus 要高出好多,当然,这一切的前提都是在 BusUtils ...

2019-08-06 15:04:47 3046

原创 synchronized关键字的原理

synchronized关键字什么是synchronizedJDK官网对synchronized关键字有个比较权威的解释。Synchronized keyword enable a simple strategy for preventing thread interference and memory consistency errors: if an object is visible...

2019-08-05 15:11:54 295

原创 JVM常见面试题解析

前言总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。1.什么情况下会发生栈内存溢出。思路: 描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。我的答案:栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动...

2019-08-05 14:51:32 324

原创 一篇文章彻底明白Android文件存储

前言Android中经常需要使用文件存储用户数据本文将梳理各个版本中的文件存储,希望能帮上忙。文件存储 思维导图1. 简介Android开发中有五种数据持久化API:持久化 示意图2. 内部存储空间(Internal Storage)2.1 划分内部存储 示意图目录:/data/data/特点:每个应用独占一个以包名命名的私有文件夹在应用...

2019-08-05 14:20:58 1328

原创 XML中配置网易云歌手详情滑动效果

HeaderLayout网易云音乐App给用户的体验效果一直都非常好,尤其是流畅的动画和滑动的联动效果,都给人一种如丝滑般的感受,这一点在其歌手详情页面体现得尤为突出。那么我们就来实现这样的效果,但是我们不能只局限在实现当中,否则当需求变化就需要改动大量的代码,同时也不能保证它的复用性,放到其他界面则需要写许多重复代码。因此我们需要跳出实现的限制,将其中的元素抽取出来,制作成一个通用的库,并且...

2019-08-01 16:47:15 331

原创 10张 GIF 动图让你弄懂递归等概念

正文今天为大家整理了十张动图GIFS,有助于认识循环、递归、二分检索等概念的具体运行情况。一、循环GIF 1:最简单的 while 循环GIF 2:带 if/else 的循环二、递归GIF 3:递归概念的直接演示GIF 4:递归的代码示例GIF 5:递归求斐波那契数列GIF 6:递归求阶乘三、按值传递和按引用传递GIF 7:按值传递和按引用传递的区别...

2019-08-01 16:16:58 419 1

原创 Android地图轨迹抽稀、动态绘制

为什么会有这篇文章?因公司业务调整降低运动门槛,产品部要求引入地图,记录用户的运动轨迹上传至服务器,用户进入记录页面可查看运动轨迹。而且绘制轨迹的时候要求有一个绘制动画(参照咕咚)。听到这心中万只草泥马 ~~~ 可是需求下来了,还是得硬着头皮做啊。提早说一些废话吧(万一被我枯燥的文字折磨的滑不到文末,就中途退出,遂提至此处)作为一个非计算机专业出身的菜鸟程序员(原专业:大通信)做完这个...

2019-08-01 15:58:14 1938 4

空空如也

空空如也

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

TA关注的人

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