自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 资源 (2)
  • 收藏
  • 关注

原创 接口 VS 抽象类的区别?

在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多态特性和基于接口而非实现的设计原则,使用抽象类来实现面向对象的继承特性和模板设计模式等等。 不过,并不是所有的面向对象编程语言都支持这两个语法概念,比如,C++ 这种编程语言只支持抽象类,不...

2020-01-20 18:45:55 265

原创 封装、抽象、继承、多态分别解决了那些编程问题

封装(Encapsulation)首先,我们来看封装特性。封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。这句话怎么理解呢?我们通过一个简单的例子来解释一下。下面这段代码是金融系统中一个简化版的虚拟钱包的代码实现。在金融系统中,我们会给每个用户创建一个虚拟钱包,用来记录用户在我们的系统中的虚拟货币量。对于虚拟钱包的...

2020-01-16 12:23:01 1119

原创 Android 删除项目中的无用资源

随着业务的快速迭代增长,App 里不断引入新的业务逻辑代码、图片资源和第三方 SDK,直接导致 APK 体积不断增长。包体积增长带来的问题越来越多,如流量费用增加、用户安装成功率降低,甚至可能会影响用户的留存率。APK 的瘦身已经是不得不考虑的事情。在尝试瘦身的过程中,我们借鉴了很多业界其他公司提供的方案,同时也针对自身特点,进行如下优化一、删除无用的 png 图片文件和 xml...

2019-08-02 11:55:14 3200

原创 Android ViewGroup 中 addView 方法使用详解

       在日常开发中 我们会涉及到很多架构 例如 MVC  MVP MVVM 等等,如果我们的项目本身就是用 MVP 或 MVVM 架构, 那么 Activity 和 Fragment 中的代码冗余可能会相对小一些 但是如果项目的设计架构本身就是 MVC 这样我们还可以用其他的一些方法来分解我们 Activity 和 Fragment 中的代码冗余,对,就像标题中说的,利用 ViewGrou...

2018-09-22 00:48:37 3973

原创 设计模式之模板方法模式

      在模板(Template Pattern)中,一个抽象类公开定义了执行它的方式/模板,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行,这种类型的设计模式属于行为型设计模式。今天我们就来一起学习探究下设计模式中的模板方法模式,下面是我们今天要学习的内容大纲一、模板方法模式简单介绍意图:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法...

2018-05-24 23:35:00 391 1

原创 设计模式之装饰者模式

      装饰者模式(Decorator Pattern)允许想一个现有的对象添加新的功能,同时又不改变其结构,这种类型的设计模式属于结构性模式,它是作为现有的类的一个包装,这种模式创建了一个装饰类,用来包装原有的类,并保证类方法签名完整的前提下,提供额外的功能。一、装饰者模式简单介绍意图:动态的给对象添加一些额外的职责,在不想增加很多子类的情况下扩展类,将具体功能职责划分,同时继承装饰者模式。...

2018-05-09 23:45:14 435

原创 Android 性能优化之内存优化

在移动操作系统上,通常物理内存有限,尽管 Android 的 Dalvik 虚拟机扮演了常规的垃圾回收的角色,但这并不意味着我们可以忽略 APP 的内存分配与释放,为了 GC 能够从 APP 中及时回收内存,我们在日常的开发中就需要时刻注意内存泄露,并在合适的时候来释放引用对象,对于大多数的 APP 来说,Dalvik 的 GC 会自动把离开活动线程的对象进行回收,接下来我们就来看看有关内存方面的...

2018-03-26 13:14:02 1591

原创 Java 基础之多线程

一、什么是线程?它与进程有什么区别?为什么要使用多线程?      线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在 Java 语言中线程有 4 种运行状态:运行、就绪、挂起和结束。       进程是指一段正在执行的程序。而线程有时也被称为轻量级的进程,各个线程之间共享程序的内存空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开文件),但是各个线程拥有自己的栈空间      ...

2018-03-09 15:36:19 648 1

原创 Java 基础之容器

一、Java Collections 框架是什么     Java Collections 框架中包含了大量的集合接口以及这些接口的实现类和操作他们的算法(例如:排序、查找、反转、替换、复制、取最小元素、取最大元素等),具体而言,主要提供了 list(列表)、Queue(队列)、Set(集合)、Stack(栈)、和 Map(映射表,用于存放键值对)等数据结构,其中 List、Queue、Set、S...

2018-03-06 11:25:23 501 1

原创 Android 全面解析 Handler 异步消息处理机制

      Android 是不容许在子线程中进行 UI 操作的,但是有些时候我们必须在子线程里去执行一些耗时任务,然后根据执行的结果来更新相应的 UI 控件,对于这种情况,Android 提供了一套异步消息处理机制,完美解决了在子线程中进行 UI 相关操作的问题,今天我们就来一起学习一下这个 Android 系统提供的异步消息处理机制,下面是我们学习的内容大纲                  ...

2018-01-14 15:07:58 1127 1

原创 Java 基础知识总结

在面试过程中 Java 有很多面试题需要我们进行总结记忆,今天我们就来总结一下 java 基础中常见的面试题1. 接口的意义:规范、扩展和回调2. 抽象类的意义:为其子类提供一个公共的类型,封装子类中的重复内容,定义抽象方法,子类虽然有不同的实现,但是定义是一致的3. 内部类的作用:1)内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立2)在单个外围类中,可以让多个...

2017-10-19 14:10:23 765 1

原创 Java 阿里官方代码规范标准手册终极版下载

由于我们 Andorid 也是使用 Java 来开发的,所以在大部分命名风格上也是遵从 Java 的命名规范,Java 统一规范标准有助于提高行业编码规范水平,提高我们的开发质量和效率,大大降低代码维护成本,今年年初阿里就发布了 Java 命名的规约 --《阿里巴巴 Java 开发手册》,到现在经过几次迭代更新,已经非常完善,值得大家借鉴。《阿里巴巴 J

2017-10-11 09:39:01 7328 2

原创 Java 常用查找算法

面试中经常会问一些查找算法,今天来总结一下常用的查找算法一、顺序查找描述:从表中的第一个或者是最后一个记录开始,将表中记录的关键字和给定的值进行逐个比较,若某个记录的关键字和给定值相             等,则查找成功,若表中所记录的关键字和给定值都不相等,则查找失败。算法实现: /** * 顺序查找 * * @param searchKey 要查找的值 ...

2017-10-10 14:33:07 1969 1

原创 Android 使用 CrashHandler 来获取应用的 crash 信息

在日常开发的过程中应该不可避免的会发生 crash,无论你的程序写的多么完美,都不可能完全避免 crash 的发生,可能是由于 Android 底层的 bug,也可能是由于不充分的机型适配或者是糟糕的网络状况。当 crash 发生时,系统就会kill掉正在执行的程序,现象就是闪退,或者提醒用户程序已经停止运行,这对用户来说是很不友好的,也是我们不愿意看到的,更早的是当用户发生 crash,我们开发

2017-09-29 09:09:52 966 1

原创 Android 使用 Multidex 解决 65536 方法数越界问题

在 Andorid 中单个 dex 文件所能包含的最大方法数为 65536,这包含 Android FrameWork、依赖的 jar 包以及应用本身的代码中所有的方法,65536 是一个很大的数字,一般来说一个简单的应用很难达到 65536 这个方法数,但是一些比较大型的应用以及大家开始越来越多的使用组件化开发,65536 就很容易达到,当应用的方法达到 65536 后,编译器就无法完成编译,会

2017-09-19 09:42:05 1300

翻译 Realm for Android 使用入门

Realm是一个手机数据库,是用来替代SQlite的解决方案,比SQlite更轻量级,速度更快,因为它有一套自己的数据库搜索引擎,并且还具有很多现代数据库的优点,支持JSON,流式API调用,数据变更通知,自动数据同步,简单身份验证,访问控制,事件处理,最重要的是跨平台,目前已经支持Java、Swift、Object - C、React - Native 等多种实现,今天我们就来简单的入门 Rea

2017-09-11 17:03:42 1136

原创 Android 强大的滚动控件 RecyclerView

ListView 由于其强大的功能,在过去的 Andorid 开发中使用非常广泛,直到今天仍然还有很多人在使用着,不过 ListView 也有自己的缺陷,例如需要优化来提升运行效率,还有就是只能够纵向移动,我们要想实现横向移动就实现不了,ListView 的扩展性也不好为此 Android 提供了一个更强大的控件--RecyclerView 它可以说是一个增强版的 ListView 不仅可以实现和 ListVie

2017-09-03 23:29:29 2085 3

原创 Android Fragment 完全解析(下)

前几天我们分享了 Fragment 的基本使用,包括 Fragment 的概念、Fragment 设计原理、如何创建 Fragment、在 Fragment 中模拟返回栈、Fragmen t的生命周期以及 Fragment和 Activity 之间的通信等相关的内容,如果你对 Fragment 的基本使用还没有一个详细的了解,可以先阅读  Android Fragment 完全解析(上),今天

2017-08-29 11:04:57 974

原创 Android Fragment 完全解析(上)

Fragment(碎片),被称为Andorid第五大组件,也是继Activity、Service、BroadcastReceiver、ContentProvider四大组件之后有一个非常重要的组件,今天我们就来学习一下Fragment一、概述Fragment 表示 Activity 中的行为或用户界面部分,你可以将多个碎片组合在一个Activity中来构建多窗格 UI,以及在多个Activ

2017-08-25 17:07:20 1736

原创 Android Activity 完全解析(下)

在之前的文章中我们介绍了Activity的生命周期,包括正常情况下Activity的生命周期,以及多个Activity交互和横竖屏切换Activity之间的生命周期,还介绍了如何启动系统的Activity,Activity之间简单的数据交互,以及传递大数据时遇到的问题,还有就是Activity的四种启动模式,如果你对Activity还不太了解,那么可以先阅读之前的两篇关于Activity的相关介绍

2017-08-22 15:48:24 1356

原创 Android 详解 build.gradle 文件

       不同于 Eclispse,Android Studio 是采用 Gradle 来构建项目的,Gradle 是一个非常先进强大的项目构建工具,它使用了一种基于 Groovy 领域的特定语言(DSL)来声明项目设置,摒弃了基于 XML(如 Ant 和 Maven)的各种繁琐的配置,今天我们就来一起探讨 Android Studio 中强大的项目构建工具 Gradle一、简介       ...

2017-08-18 17:16:07 4826 3

原创 Android 四大组件之 BroadcastReceiver

广播接受器( BroadcastReceiver)是Android的四大组件之一,Android 中的广播机制是非常灵活的,Android 只的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序就只会接受自己关心的广播内容,这些广播可能是来自系统的,也可能是来自其他程序的,Android 提供了一套完整的API,容许应用程序间自由地接受和发送广播,今天我们来一起总结 Broadcast Re

2017-08-15 23:25:05 867

原创 Android 多线程编程初探

Android 中的多线程其实就是 java SE 中的多线程,只是为了方便使用,Android 封装了一些类,如 AsyncTask、HandlerThread 等,在日常的开发过程中,我们往往需要去执行一些耗时的操作,例如发起网络请求,考虑到网速等其他外在的因素,服务器可能不会立刻响应我们的请求,如果不将这条操作放到子线程中去执行,就会造成主线程被阻塞,今天我们就从多线程的基础来一起探讨一

2017-08-11 16:28:55 830

原创 Android 四大组件之 Service (下)

上篇文章中我们学习了服务的概念、服务的基本用法,包括启动和停止服务、活动和服务进行通信、服务的生命周期,如何销毁服务等内容,这些都是我们日常用到的,不过还有一些更加高端的服务技术需要我们学习,如果你还对服务不是很了解可以去查看上一篇文章,文章地址:Android 四大组件之 Service(上),今天我们就一起来学习更多 Service 相关的内容,接下来我们开始演绎

2017-08-10 15:36:16 1051

原创 Android 四大组件之 Service (上)

       Android 有四大组件,这是每一个 Android 开发者一开始就知道的,也是 Android 基础中的重中之重,是构成 Android 的基石,但相信并不是每一个人都对服务非常的了解,今天我们一起来探究 Android 四大组件之一 Service(服务),对服务进行详细的剖析,来看一看这个运行在后台的默默无闻的工作者一、服务的概念       服务(Service)是一个可以...

2017-08-06 22:04:25 1107

原创 Retrofit 2.0 基本使用

网络请求在Android中的使用非常多,在上一篇文章中我们简单的介绍了OkHttp的基本使用,今天我们来入门一下Retrofit网络请求库,在github上到目前为止,Retrofit的Star数量已经到了22k,Fork 4.6k,看到这里我们就能感觉到Retrofit的火热程度,所以我们有必要来认真了解一下Retrofit的使用一、概述随着Volley的逐渐没落,OkH

2017-08-02 17:23:47 975

原创 OkHttp 3 基本用法

OkHttp也已经出来很久了,相信大家也都在项目中使用了,今天来对OkHttp使用进行一个简单的总结,HTTP是超文本传输协议,也是互联网上应用最为广泛的一种网络协议,高效的进行HTTP使用可以使你的东西更快的加载并节省带宽,OkHttp是HTTP客户端的有效应用,OkHttp处理了很多疑难杂症

2017-07-27 11:11:50 1333

原创 设计模式之建造者(Builder)模式

这里我们先来声明一下,建造者模式(Builder)也叫生成器模式,也就是说他们两个只是在叫法上稍有不同,指向的其实是一种模式,这个大家了解一下就好,建造者模式将一个复杂的对象的构建与它的表示相分离,使得同样的构建过程可以创建不同的表示,具体来说就是,它将客户端与包含多个组件部分的复杂对象的创建过程分离,客户端无需知道复杂对象的内部组成部分与装配方式,只需要知道所需建造者的类型即可,它关注如何一步一

2017-07-17 09:52:51 1091 2

原创 2017 Android GitHub 常用开源框架汇总

现在 GitHub 上流行的开源库极大地节省了开发者从 0 开发的时间,很多公司和个人都在 GitHub 上开源自己的项目,今天我们就来整理一下 Android 开发中一些非常流行的库,也是我们必须掌握的,这样可以使我们在使用到时快速的查找到,这里的总结基本也都是自己在开发中用到的,也就是一些个人的见解,只做参考,不具有权威性

2017-07-13 16:20:01 5121 4

原创 设计模式之策略模式

这里我们还是用《Head First》一书中的例子来进行讲解,一步步来引出策略模式,在前几篇文章中我们分别分享了设计模式入门和单例模式以及非常重要的观察者模式,如果需要大家可以去看看,今天我们来由浅入深的一起来看看策略模式,看看策略模式的定义,在实际编码的过程中能解决那些重要的问题,以及主要是在那些场景下去使用,还有最重要的就是我们在实际的编码中如何一步步去实现

2017-06-17 21:45:41 1126

原创 设计模式入门

这段时间在看 <<Head First>> 设计模式一书,觉得非常不错,有必要总结一下,于是就想借鉴参考 <<Head First>> 把设计模式总结成一个系列的博客,方便自己日后来复习,今天我们就简单的来先一起入门一下,简单的探讨一下设计模式,设计模式是人们在面对同类型软件工程设计问题所总结的一些有用的经验,模式不是代码,而是某类问题的通用设计解决方案,设计模式的本质是使软件工程在维护性、扩展性、变化性、复杂度方面变成 O(N)

2017-06-16 12:45:44 1914 3

原创 设计模式之观察者模式

观察者模式在实际开发中是一个使用率极高的一种设计模式,在设计模式中相比较来说也是必须要掌握的模式之一,观察者模式(有时又被称为发布(publish)- 订阅者(Subscribe)模式、模型 - 视图(View)模式等)只是叫法上不太一样,是软件设计的一种模式,在此种模式中,一个目标物件管理所有相依赖于它的观察者物件,并且在它本身的状态发生改变时主动发出通知,此种模式通常来实现事件处理系统

2017-06-04 14:33:07 1187

原创 Java 接口回调机制

日常开发中接口回调机制无处不在,刚开开始用时却总是晕晕乎乎,网上也有很多相关的文章介绍,但总是没有看得太明白,今天特意花时间来总结一下一、什么是接口回调在应用开发中,接口回调机制是一种常用的设计手段,也可以说是一种处理问题的模型,类之间,模块之间,都有一定的调用关系,一般来说,可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的

2017-05-26 21:05:32 6068

原创 Android 开发的未来语言 Kotlin 及学习资源

一年一度的 Google I/O 大会刚刚进行完毕,对于 Android 开发者来说莫过于 Google 宣布 Kotlin 将成为 Android 开发的官方支持语言以及 Andriod 在全球已经激活 20 亿部设备,Kotlin 到底是个什么东西,可能很多人还不了解,我也一样,只是听说过,具体是什么并不知道,只能说感觉太菜了,从这场 I/O 中给我的直接感觉就是科技的伟大,以及更重要的是这些

2017-05-18 23:48:59 2374

原创 Android 悬浮按钮 FloatingActionButton 和交互提示 SnackBar

今天是我们分享的关于 Material Design 的第五篇文章了,今天给大家简单分享 FloatingActionButton 和 SnackBar 这两个 Material Design 小控件用法,通过之前几篇博文的相关的对 Material Design 的介绍,大家对 Material Design 也有了一些了解,本篇我们来接着学习上面说到的两个简单的小控件

2017-05-13 10:02:53 4353

原创 Android 用 TabLayout + ViewPager + Fragment 实现顶部、底部导航栏

这是我们 Material Design 系列的第四篇分享了,对 Material Design 还不是太清楚的可以先过前几篇大概的了解一下,今天我们主要通过实现顶部和底部导航栏的功能来了解又一个 Material Design 的控件 TabLayout 的使用,在移动应用开发中,由于屏膜大小的限制,使得顶部、底部 Tab 导航栏的使用非常的广泛,相信大家在实际开发过程中也是经常遇到,以前可以通

2017-05-06 13:37:35 5968 2

原创 Android 用 DrawerLayout 和 NavigationView 实现侧滑菜单栏

侧滑菜单是很多 APP 中常见的功能效果,今天我们将介绍使用 Material Design 中的 DrawerLayout 和 NavigationView 相结合来实现侧滑栏菜单效果,借助Google提供的这些工具实现侧滑的功能将变得异常的简单,侧滑菜单可以将菜单选项隐藏起来,然后可以通过滑动的方式来显示,这样很好的节省了手机屏膜的空间,这也是 Material Design 设计中非常推荐的

2017-05-04 22:51:28 2237

原创 Android ToolBar 完全解析

在上一篇文章中我们详细介绍了什么是 Material Design,以及一些 MD 的风格,接下来我们就来进行实战,而 ToolBar 将会是我们第一个来进行实战的 Material 控件,虽然对 ToolBar 还不是那么熟悉,但是相信另一个相关的控件我们是非常熟悉的,那就是 ActionBar,相信这个大家都是很熟悉了,没错,活动的顶部导航的那个标题栏其实就是 ActionBar,我们之前的应

2017-04-23 14:18:58 2006 2

原创 Android 什么是 Material Design

在公司实战开发长久以来,因为在 IT 公司在应用界面设计的时候为了保持统一,我们的产品经常会强制要求 Android 的界面风格要和 iOS 一致,因为人家长得好看,这种要求在工作中被认为是普遍存在的,,这也确实怪不了别人,问题在于 Android 标准的设计风格并不是被用户所接受,大家基本都认为 Android 系统的 UI 太难看,再加上很多公司都在自己设计自认为更加好看的界面,这样就造成了

2017-04-20 22:33:07 1982

原创 Android 数据存储方案

我们每天都在和数据打交道,在编写应程序以及使用应用程序的过程中时时刻刻存在着数据之间的交互,平时我们上 QQ、微信、微博,其实都是在产生数据,为了使关机后数据不丢失,我们就需要数据的持久化,这里简单的说一下数据的持久化,数据的持久化其实就是将那些在内存中的瞬时数据保存到存储设备中,保证即使在设备关机的情况下这些数据任然不会丢失,保存到内存中的数据是处于瞬时状态的,而保存在存储设备中的的数据是处于持

2017-04-15 23:02:10 1755

用 TabLayout 实现底部、顶部导航栏

用 TabLayout 实现底部、顶部导航栏,你绝对需要掌握的

2017-05-08

NavigationView

实现 Material Design 风格的左滑菜单栏

2017-05-05

空空如也

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

TA关注的人

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