自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(283)
  • 收藏
  • 关注

原创 Android 分享 Library 到 Jcenter

在安卓开发中,我们经常会在 build.gradle中引入各种各样的依赖辅助我们进行开发,如常用的 okhttp 请求 Library:dependencies { implementation 'com.squareup.okhttp3:okhttp:3.12.1'}如果我们开发了自己的通用 Library,怎么让别人可以这样使用呢,下面介绍一下怎么将 Android Li...

2019-10-14 21:25:19 149

原创 Git新手教程-查看仓库的历史记录

前言在前面的文章中,我们学习了如何创建仓库。现在我们将学习如何查看仓库的历史记录,之所以没有先讲解如何向仓库如何提交commit,是因为我觉得,只有先了解历史记录中包含哪些信息后,我们才能更好的创建良好的提交。有了良好的提交,才会有助于以后我们对项目的整体回顾。在本文章中,我们将介绍 git log 和 git show 两个指令,这里先简单介绍一下这两个命令的功能。git log:查看现...

2019-10-14 20:44:31 903

原创 Git新手教程-从头创建仓库

前言在上篇文章中,我们学习了版本控制系统的一些专业术语,我们在计算机上也安装了Git,并为Git做了一些初始配置,比如添加点击邮件,名字。及配置默认的Git的默认编辑器。在本篇文章中,我们将学习仓库的创建。在该篇文章中,我们不仅将学习如下三个命令git init、git clone、和git status,还将会学习该命令在IntelliJ IDEA or Android Sutdio中图形界...

2019-10-14 17:27:47 349

原创 Android内存优化方向探讨

前言最近复习对以往项目中和学习中一些内存优化的方法进行下探讨和汇总. 虽然现在Android设备的内存越来越大,4GB内存手机已经相当普片了,但是只有有效的控制好内存才能将你的应用性能发挥到极致.所以控制好内存现在依然是Android应用中一个重要的技术指标.开篇之前我们先说说内存.内存已经是我们很熟悉的概念了,但是你能说出手机内存和电脑内存的区别吗?手机内存之间有差异吗?内存是否大就好?...

2019-10-14 16:53:12 471

原创 Git新手教程-Git的下载与设置

前言在前面的文章中,我们介绍了Git的基本概念,了解的Git常用的术语。相信大家对Git已经有一个基本的了解了。工欲善其事,必先利其器。让我们去下载并配置Git吧。Mac/Linux/Windows设置我们可以根据自己的系统,选择不同的版本。推荐上官网直接下载最新的版本。跳转到Git相关下载界git-scm.com/downloads 选择你所需要的系统版本并安装安装完成后...

2019-10-13 20:24:49 172

原创 如何从零开发一个 gradle 插件

相信开发过 Android 应用的人都明白 gradle 的重要性,作为 Android 官方默认的构建工具,Android 开发者在日常开发中免不了和 gradle 打交道。而 gradle 的大部分功能都是通过插件扩展的,像我们最常用的插件就是 Android 官方插件 com.android.application,用来做一些和 Android 相关的配置。那如果我们想自己开发一个 gr...

2019-10-12 20:18:33 122

原创 Git新手教程-什么是版本控制(一)

什么是版本控制在我们进行深度学习 Git 之前,我想给大家讲个故事,时间回到我们青春岁月的大学时代,在大四的小伙伴们,我相信大家都经历过毕业论文????‍????的折磨。在无数遍咒骂导师的时候,我们将毕业论文改了一遍又一遍。《绝不修改版本1》,《修改剁手版本1》,《打死不改版本》,《改了,导师挂全家版本》....等等,随着论文修改的版本次数增加与时间长短等其他原因。我们或许已经忘记在相应版本中,我们添加了...

2019-10-12 20:14:34 181

原创 Apk不得不看的瘦身大全

概述我平常在项目开发中,刚开始的APK包可能不太大,但是随着时间的变迁,项目的迭代,慢慢的就回发现打出来的APK包越来越大,包每大一点可能用户下载的欲望就小一些,所以在平常的项目迭代过程中,对APK瘦身的工作也要持续进行,这篇文章就会记录一下从几个方面对apk进行瘦身APK构成初探我们生成一个包,把包拖到Android studio中就可以看到包的构成了apk的构成如上图,下面...

2019-10-12 20:02:38 145

原创 Android开发之指纹识别

Android9.0由于无法自定义指纹识别框 所以不额外考虑了本文的场景仅定位于Android6.0以上本文实现的登录流程流程思路启发于支付宝 登陆界面判断是否开启指纹登录 进入主界面可设置是否开启指纹登录基本的流程算是整完了哈 接下来就是去瞟一瞟官方的文档啦(~o ̄3 ̄)~下面是Android官网中的文档 指纹识别类这个方法为指纹识别中的核心方...

2019-10-12 16:48:53 687

原创 Flutter 学习——Dart 入门

变量基本类型bool done = true;int num = 2;double x = 3.14;final bool visible = false;final int amount = 100;final double y = 2.7;const bool debug = true;const int sum = 42;const double z = ...

2019-10-11 21:20:36 163

原创 谈一谈HTTP和WebSocket的区别

HTTPHTTP协议是互联网上应用最为广泛的应用层协议,万维网都要遵守HTTP协议。HTTP/1.0HTTP/1.0版本实现了HTTP协议的基本功能,但是1.0版本性能问题比较明显,因为HTTP协议是基于TCP协议的,所以HTTP的性能问题大多数都来自于TCP协议,在每次使用HTTP协议传输数据之前都要先建立TCP连接,建立TCP连接要进行三次握手,并且TCP的慢启动机制使新建立的TC...

2019-10-11 20:17:46 465

原创 类比于微信,如何对Apk进行极限压缩,谈下Android压缩8大步

一、简介随着项目的不断迭代,代码量跟资源文件不断增多。那么就会出现打包后的 APK 文件越来越大,如果突然有一天你们老板或领导叫你优化 APK 大小,你还不知道怎么优化那就有点说不过去了,这篇文章咱们就来一起分析并优化 APK 体积大小吧。分析 APK 资源占用二、注意:我是在 GitHub 找了一个人气比较高的开源项目,需要的话自己可以点击下载,自己动手尝试一番.分...

2019-10-11 20:06:03 919

原创 一线互联网大厂android面试笔试总结(android篇)

一、Activity中的几种启动模式standard:这个是android默认的Activity启动模式,每启动一个Activity都会被实例化一个Activity,并且新创建的Activity在堆栈中会在栈顶。singleTop:如果当前要启动的Activity就是在栈顶的位置,那么此时就会复用该Activity,并且不会重走onCreate方法,会直接它的onNewIntent方...

2019-10-11 17:06:28 694

原创 安卓特效相机之视频录制

我们这里将使用MediaRecorder去录制视频。MediaRecorder可以同时录制视频和音频。我们将音频源直接设置成摄像头,让它从摄像头里面读取音频数据:mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);mMediaRecorder.setAudioEncoder(MediaRecorder.Aud...

2019-10-10 17:27:16 1033 1

原创 Android应用基础知识

Android 应用采用 Java 编程语言编写,Android SDK 工具将代码连同任何数据和资源文件编译到一个 APK(Android 软件包)当中,即带有 .apk 后缀的存档文件中。一个 APK 文件包含 Android 应用的所有内容,它是基于 Android 系统的设备用来安装应用的文件安装到设备后,每个 Android 应用都运行在自己的安全沙箱内:Android 操作系统...

2019-10-10 17:10:09 207

原创 Android开发IPC机制-序列化机制

PC(Inter-Process Communication)的含义即为进程间通信或者翻译为跨进程通信,是指两个进程之间进行数据交换的过程。一般情况下,在 Android 系统中一个应用就只享有一个进程,在最简单的情况下一个进程可以只包含有一个线程(当然,一般情况下是不可能的),即主线程,也称为 UI 线程有时候应用因为某些原因需要采用多进程模式,此时如果要在应用内的不同进程间进行通信,就需要...

2019-10-10 16:49:05 202

原创 Android开发IPC机制之进程和线程.

默认情况下,Android 系统中同一应用的所有组件均运行在相同的进程和线程(称为主线程)中,新启动的应用组件会创建进程或者在已存在的进程中启动并使用相同的执行线程。 但是,也可以安排应用中的组件在单独的进程中运行,并为任何进程创建额外的线程一、进程如果需要控制某个组件所属的进程,则可在清单文件中执行以下操作各类组件标签:< activity >、< service ...

2019-10-10 16:39:19 172

原创 Android项目重构实践:从 Fresco 到 Glide 低成本重构方案

Fresco 是一个入侵性很重的框架,如果使用 Fresco 我们的ImageView都要替换为 SimpleDraweeView,如果使用自定义ImageView,就非常麻烦。虽然 SimpleDraweeView 提供了非常丰富的功能,比如圆角,边框等,但有时候会出现非常奇怪的布局异常。在5.0版本以前 Fresco 可以有效降低 OOM,但是现在已经没有优势了,所以项目计划从 Fresco ...

2019-10-09 20:16:41 269

原创 Android音视频系列:使用MediaCodec播放视频文件

前言本篇博客我们一起来研究Android系统音视频api中,应该算是最难、最复杂的类:MediaCodec。相对于之前介绍过的MediaPlayer,AudioRecod等等来说,MediaCodec用法稍微复杂了一些,而且有一些小坑值得踩一踩。首先熟悉一个MediaCodec的常用方法:createEncoderByType(@NonNul String type) :静态构造...

2019-10-09 20:04:11 1800 1

原创 Flutter动画实现粒子漂浮效果

要问2019年最火的移动端框架,肯定非Google的Flutter莫属。本着学习的态度,基本的Dart语法(个人感觉语法风格接近Java+JS)过完之后,开始撸代码练手。效果图1. Flutter的动画原理在任何系统的UI框架中,动画实现的原理都是相同的,即:在一段时间内,快速地多次改变UI外观;由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画,这和电影的原理...

2019-10-09 17:24:34 885

原创 Glide 缓存设计分析

Glide 中的缓存类型活动资源 (Active Resources) - 现在是否有另一个 View 正在展示这张图片? 内存缓存 (Memory cache) - 该图片是否最近被加载过并仍存在于内存中? 资源类型(Resource) - 该图片是否之前曾被解码、转换并写入过磁盘缓存? 数据来源 (Data) - 构建这个图片的资源是否之前曾被写入过文件缓存?从内存加载活动资源...

2019-10-09 16:55:18 264

原创 Android 网络安全:URL签名验证的实现API防篡改

我们在做APP开发的时候,APP的网络安全是极其重要,我们有必要对请求的API进行加密和防篡改。HTTPS是一个很好的传输加密的方式。如果APP的请求API地址和参数被泄露,我们还是可能会被恶意请求。所以我们有必要实现 URL签名,对请求的参数进行校验,在客户端生成URL签名,在服务端对签名进行校验,如果客户端的URL签名算法保密做得好,就可以避免非法请求,签名算法的加密需要使用 C++编写,...

2019-10-08 17:29:35 722

原创 Android-自定义气泡View

实践背景在即时通讯类应用里,很常见各种气泡布局包裹消息,通常我们采用.9图实现。但是使用气泡图片面临着间距不可控,如果是图片消息,此方法就无法实现气泡。本文将介绍如何更加用优雅的方式去实现自定义气泡布局。PS前置知识: 如何自定义view、XFermode混合图层、path概念以及贝赛尔曲线。惯例,我们先看下最终要实现的效果图,如下图,总共有5种类型,基本满足日常需要,可以根据需要...

2019-10-08 16:53:58 1402

原创 性能优化-卡顿优化

为什么会卡顿1.界面绘制的层级过高2.UI线程存在耗时操作3.GC频繁导致线程频繁挂起怎么检测1、接入BlockCanary框架框架的检测原理:利用主线程Looper日志打点检测众所周知在应用启动时,在ActivityThread的main方法中会在主线程启动一个MainHandlerHandler源码每次执行MessageQueue之前会打印日志,执行完之后会打印...

2019-10-08 16:31:52 314

原创 Android线程与线程池的这些你知道吗?

在Android中,线程分为主线程和子线程,主界面用于与用户交互,进行UI的相关操作,而子线程则负责耗时操作。如果在主线程中进行耗时操作,就会使程序无法及时的响应。因此耗时操作必须放在子线程中进行。1、主线程和子线程主线程是指进程所有用的线程,在Android中即指进行UI与用户交互的线程就是主线程。因此在Android开发中,需要竟可能的把耗时操作,网络请求访问操作,数据库读取操作等放在...

2019-10-08 16:08:46 301

原创 Android开发:build.gradle 配置指南

前言作为Android开发,我们几乎每天都在和builg.gradle打交道,但是你真的知道build.gradle里的每一行代码有什么用吗?以及builg.gradle到底有哪些作用?本文旨在全面的向大家介绍builg.gradle的作用与使用方法。通用配置在我们新建项目时,Android Studio 会自动为我们生成两个build.gradle文件,一个位于根目录,一个位于app...

2019-10-07 20:22:17 419

原创 一种强大、可靠的React Native拆包以及热更新方案,基于CodePush,Metro

背景需求因为需要将各业务线通过划分jsbundle的形式进行分离,以达到各个业务包独立更新、回滚以及版本管控 增量加载,优化启动速度 优化增量更新,只对单独某一业务包增量更新案例参考参考了携程以及各种网络版本的做法,大致总结为三种修改RN打包脚本,使其支持打包时生成基础包以及业务包,并合理分配moduleID(携程方案) 优点:定制化高,性能优化好,可以做到增量加载 缺...

2019-09-30 20:13:41 1569 1

原创 ToolBar 在项目中的变迁

本文旨在分享自己在 ToolBar 使用上的偷懒,没有较多代码,只是分享一种思路。这里指的 ToolBar 是泛指顶部的那个功能区域,不仅仅局限于 Android 中的 ActionBar、ToolBar 。ToolBar 的样式ToolBar 应该算是在项目中使用较为广泛的一个 View 了,它主要用于展示当前页面的标题、导航按钮及可能存在的扩展功能。下图就展示了一...

2019-09-30 17:22:14 137

原创 关注 Flutter 自定义 Widget 之饼形图实战

本文主要讲述了 Flutter 如何实现自定义 Widget 以及自定义饼形图实战,如有不当之处敬请指正。阅读本文大约需要6分钟。一、背景Flutter 官方目前已经提供很多的小部件,可以直接使用,有 Material 风格的小部件,也有 iOS 风格的小部件,还有一些布局相关的小部件。在正常开发中能满足绝大多的页面场景,但是仍有部分小部件是官方没有提供的。虽然官方没有提供完整的小...

2019-09-30 16:58:52 424

原创 自定义View之双层波纹气泡(xFermode)

效果图今天给大家带来的是双层波纹气泡效果,有请图片:实现思路1.首先计算自定义view的真实宽高和气泡的直径等size2.画气泡的带透明度背景图3.新建一个图层画里层的气泡波纹效果,使用xfermode混合模式SRC_IN画一个圆与一个贝塞尔曲线path从而生成波纹效果4.再新建一个图层画外层的气泡波纹效果5.最后通过改变画波纹的起始位置及其高度来让波纹动起来开始...

2019-09-30 16:11:29 273

原创 Flutter 滚动监听及实战appBar滚动渐变

介绍在 Flutter 中滚动监听一般可以采用两种方式来实现,分别是 ScrollController 和 NotificationListener 这两种方式。ScrollController介绍ScrollController介绍一下ScrollController常用的属性和方法:offset:可滚动组件当前的滚动位置。 jumpTo(double offset) 跳转...

2019-09-29 16:39:13 1706

原创 谈一谈mmkv的使用

引言最近微信开源了 mmkv,之前曾经深为 android 跨进程数据共享和通信所困惑,用 contextprovider 里面 sharedpreference,也曾经考虑过用文件读写来实现,可是 Java 端对文件读写跨进程操作实在是没有很大可操作余地,ndk写的话又太耗时而且无法保障测试性能等等问题。现在开源的 mmkv 正好弥补来这一块空缺,而且结果微信检验,在性能和安全方面感觉还是比...

2019-09-29 15:53:01 7965

原创 APK瘦身探索

概述我平常在项目开发中,刚开始的APK包可能不太大,但是随着时间的变迁,项目的迭代,慢慢的就回发现打出来的APK包越来越大,包每大一点可能用户下载的欲望就小一些,所以在平常的项目迭代过程中,对APK瘦身的工作也要持续进行,这篇文章就会记录一下从几个方面对apk进行瘦身APK构成初探我们生成一个包,把包拖到Android studio中就可以看到包的构成了apk的构成如上图,下面...

2019-09-29 15:39:41 197

原创 Flutter小知识--插件开发建议

插件是flutter生态中必需品。开发者可以通过插件跟app所运行的平台进行交互。在2018年的10月时,在 pub.dev上已经有上百款插件了。插件的质量尤为重要,不管插件是来自google官方还是第三方。本文主要是探索什么是一款好的插件以及如何打造。功能性第一,其次才是APIs很多时候在写插件时,桥接的是本地已经存在的库。最直接的做法就是根据原生库的api来写对应的dart api...

2019-09-28 20:10:07 176

转载 Android Gradle插件开发

GradleGradle简介Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,支持maven、 Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件。 Gradle使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,目前也增加了基于Kotlin语言的kotlin-based DSL,抛弃了基...

2019-09-27 15:06:16 232

原创 Flutter开始干系列-实现一个登陆页

今天实现个登陆页,介绍一些 FLutter 常用到的 Widget,可以说麻雀虽小部件不少。实际效果如下:项目地址放在文后,看完效果图先罗列使用到以及今天要介绍的 Widget,StatelessWidget、StatefulWidget、MaterialApp、Scaffold、AppBar、SingleChildScrollView、Container、Padding、Co...

2019-09-27 14:57:44 715

原创 Android程序员需要了解的RSA加密(二)

上篇文章我们介绍了密码学的基础,相信你已经对密码学及相关的知识有所了解,如果还没有阅读过,可以点击这里查看????这篇文章主要给大家讲解下RSA加密的过程,但在讲加密过程前我们需要了解几个数学公式。都很简单,相信大家看了就会明白,文中遇到有链接的地方,可先跳过不影响阅读。下面我们先来看看RSA加密的介绍。RSA加密简介本文开篇的这张图就是RSA加密的三位作者,RSA算法是由Riv...

2019-09-27 14:28:02 248

原创 Android程序员需要了解的RSA加密

加密在生活中其实无处不在,我们先来看几个例子:输入用户名和密码登陆手机中的App。 菜市场买菜时输入微信、支付宝的支付密码进行结账。 网上银行转账、银行卡取现金时输入密码的操作。为了安全考虑上面这些操作都会涉及到加密,可想而知加密在现实生活中的重要性。从这篇文章开始我们来讲解下密码学中最重要的一种加密方式:RSA加密。在讲RSA加密之前,我们先来看看密码学,讲讲密码的发展历史以及当下...

2019-09-26 11:44:08 266

原创 Flutter 掌握动画开发

背景给UI界面设计合理的动画,可以让用户觉得更加流畅、直观,提高用户的交互使用感受,改善用户体验。在 Flutter 中动画分为两类:基于补间 (Tween) 的和基于物理 (Physics) 的;补间动画是介于两者之间的简称,在补间动画中定义起点和终点、时间点以及定义时间变化和速度的曲线,然后由系统计算如何从开始点到结束点。物理动画是运动被模拟为与真实世界的行为相似,比如抛一件物...

2019-09-26 11:24:39 236

原创 【Android 】为什么非 UI 线程不能更新 UI

什么是UI线程Android的核心进程zygote进程fork出我们的app,app启动的最终会走入到ActivityThread中的main方法,在main方法中会调用Looper。其中ActivityThread所在的线程被称为UI线程,也就是我们常说的主线程 (Main thread)。 关于Main thread这个称呼其实可以查看ActivityThread中main方法的源码:...

2019-09-26 10:43:25 686

空空如也

空空如也

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

TA关注的人

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