Android应用程序开发
文章平均质量分 83
Android应用程序开发相关知识
刘望舒
腾讯最具价值专家,Android进阶书畅销前三: 《Android进阶指北》《Android进阶解密》《Android进阶之光》 作者 ,连续5年蝉联电子工业出版社年度优秀作者。国内首批Android开发者,10多年开发经验,前华为架构师、独角兽公司技术总监。国内唯一被百度百科收录的Android技术专家,谷歌开发者社区、Droidcon等技术大会特邀讲师,CSDN 2018年度十大博客之星。
展开
-
Android网络编程(十)Retrofit2后篇[注解]
在上一篇中我们了解了Retrofit的最基本的GET方式访问网络的写法以及请求参数的简单介绍。这一篇我们来详细的了解Retrofit的请求参数。原创 2016-11-02 16:14:10 · 6070 阅读 · 0 评论 -
Android网络编程(九)Retrofit2前篇[基本使用]
Retrofit是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,而OkHttp现在已经得到Google官方认可,不了解OKHttp的请查看本系列的前作。原创 2016-09-11 17:37:58 · 8364 阅读 · 2 评论 -
Android响应式编程(一)RxJava前篇[入门基础]
在讲到RxJava之前我们首先要了解什么是ReactiveX,因为RxJava是ReactiveX的一种java实现。ReactiveX是Reactive Extensions的缩写,一般简写为Rx,微软给的定义是,Rx是一个函数库,让开发者可以利用可观察序列和LINQ风格查询操作符来编写异步和基于事件的程序,开发者可以用Observables表示异步数据流,用LINQ操作符查询异步数据流, 用Schedulers原创 2016-09-07 18:42:32 · 8726 阅读 · 0 评论 -
Android网络编程(八)源码解析OkHttp后篇[复用连接池]
上一篇我们根据OkHttp的源码讲解了OkHttp的请求网络流程,这一讲我们接着根据源码了解OkHttp的复用连接池。原创 2016-08-30 15:20:12 · 13924 阅读 · 3 评论 -
Android架构(一)MVP全解析
关于架构的文章,博主很早就想写了,虽说现在比较流行MVVM,但是MVP以及MVC也没有过时之说,最主要还是要根据业务来选择合适的架构。当然现在写MVP的文章很多,也有很多好的文章,但是大多数看完后还是一头雾水,所以还是自己总结比较靠谱。原创 2016-08-25 12:01:54 · 12873 阅读 · 15 评论 -
Android事件总线(二)EventBus3.0源码解析
上一篇我们讲到了EventBus3.0的用法,这一篇我们来讲一下EventBus3.0的源码以及它的利与弊。原创 2016-08-22 10:32:07 · 9210 阅读 · 5 评论 -
Android事件总线(一)EventBus3.0用法全解析
EventBus是一款针对Android优化的发布/订阅事件总线。简化了应用程序内各组件间、组件与后台线程间的通信。优点是开销小,代码更优雅,以及将发送者和接收者解耦。如果Activity和Activity进行交互还好说,如果Fragment和Fragment进行交互着实令人头疼,我们会使用广播来处理,但是使用广播稍显麻烦并且效率也不高,如果传递的数据是实体类需要序列化,那么很显然成本会有点高。今天我们就来学习下Ev原创 2016-08-17 10:21:59 · 61904 阅读 · 25 评论 -
Android网络编程(七)源码解析OkHttp前篇[请求网络]
学会了OkHttp3的用法后,我们当然有必要来了解下OkHttp3的源码,当然现在网上的文章很多,我仍旧希望我这一系列文章篇是最简洁易懂的。原创 2016-08-06 10:16:38 · 8270 阅读 · 7 评论 -
Android 数据库开发(一)SQLite3概述
SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在Android、iOS等移动操作系统中的数据库实现也是使用的SQLite3。对于Android开发者来说数据库并不算很好维护,所以深入了解SQLite数据库也原创 2016-07-03 13:54:25 · 10036 阅读 · 2 评论 -
Android View体系(十一)自定义ViewGroup
此前讲了很多,终于可以讲到这一节了,本文的例子是一个自定义的ViewGroup,左右滑动切换不同的页面,类似一个特别简化的ViewPager,这篇文章会涉及到这个系列的很多文章的内容比如View的measure、layout和draw流程,view的滑动等等,所以对View体系不大了解的同学看这篇文章前可以先从头阅读本系列的其他文章,再来看这篇文章效果会更好些。需要注意的是我们知道要实现一个自定义的ViewGroup原创 2016-06-11 09:54:32 · 10404 阅读 · 9 评论 -
Android View体系(十)自定义组合控件
上一篇我们讲到了自定义View,接着我们来讲讲常用的自定义组合控件,自定义组合控件就是多个控件组合起来成为一个新的控件,主要用来解决多次重复的使用同一类型的布局。比如我们应用的顶部的标题栏,还有弹出的固定样式的dialog,这些都是常用的,所以把他们所需要的控件组合起来重新定义成一个新的控件。原创 2016-05-19 17:10:07 · 20347 阅读 · 2 评论 -
Android网络编程(六)OkHttp3用法全解析
上一篇介绍了OkHttp2.x的用法,这一篇文章我们来对照OkHttp2.x版本来看看,OkHttp3使用起来有那些变化。当然,看这篇文章前建议看一下前一篇文章Android网络编程(五)OkHttp2.x用法全解析。原创 2016-04-21 12:26:19 · 130815 阅读 · 52 评论 -
Android网络编程(五)OkHttp2.x用法全解析
讲完了Volley,我们接下来看看目前比较火的网络框架OkHttp, 它处理了很多网络疑难杂症:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP,此外OkHttp还处理了代理服务器问题和SSL握手失败问题。原创 2016-04-18 12:10:14 · 23053 阅读 · 5 评论 -
Android网络编程(四)从源码解析Volley
从上图可以看到volley分为三个线程,分别是主线程、缓存调度线程、和网络调度线程,首先请求会加入缓存队列,如果发现可以找到相应的缓存结果就直接读取缓存并解析,然后回调给主线程;如果在缓存中没有找到结果,则将这条请求加入到网络队列中,然后发送HTTP请求,解析响应并写入缓存,并回调给主线程。原创 2016-04-13 12:05:48 · 13217 阅读 · 3 评论 -
Android View体系(九)自定义View
学习了以上的文章后,接下来我们来讲讲自定义View,自定义View一直被认为是高手掌握的技能,因为情况太多,想实现的效果又变化多端,但它也要遵循一定的规则,我们要讲的就是这个规则,至于那些变化多端的酷炫的效果就由各位来慢慢发挥了。但是需要注意的是凡事都要有个度,自定义View毕竟不是规范的控件,如果不设计好不考虑性能反而会适得其反,另外适配起来可能也会产生问题,笔者的建议是如果能用系统控件的还是尽量用系统控件。原创 2016-04-06 11:32:11 · 7395 阅读 · 4 评论 -
Android网络编程(三)Volley用法全解析
Volley想必很多人都用过,为了建立网络编程的知识体系,Volley是必须要讲的知识点,所以我这里有必要再次介绍一下Volley的使用。原创 2016-04-04 13:01:40 · 21127 阅读 · 20 评论 -
Android网络编程(二)HttpClient与HttpURLConnection
上一篇我们了解了HTTP协议原理,这一篇我们来讲讲Apache的HttpClient和Java的HttpURLConnection,这两种都是我们平常请求网络会用到的。无论我们是自己封装的网络请求类还是第三方的网络请求框架都离不开这两个类库。原创 2016-04-02 11:46:00 · 15512 阅读 · 18 评论 -
Android网络编程(一)HTTP协议原理
这篇文章是这个系列的开篇,作为移动开发者,开发的应用不免会对网络进行访问,虽然现在已经有很多的开源库帮助我们可以轻而易举的访问网络,但是我们仍要去了解网络访问的原理,这也是一个优秀开发人员所必备的知识点。这篇文章我们就先来了解一下HTTP协议原理。原创 2016-03-28 11:38:35 · 58298 阅读 · 17 评论 -
Android View体系(四)从源码解析Scroller
在[Android View体系(二)实现View滑动的六种方法]这篇文章中我们讲到了用Scroller来实现View的滑动,所以这篇文章我们就不介绍Scroller是如何使用的了,本篇就从源码来分析下Scroller为何能够实现View的滑动。原创 2016-03-05 16:35:34 · 7444 阅读 · 6 评论 -
Android View体系(二)实现View滑动的六种方法
View的滑动是Android实现自定义控件的基础,同时在开发中我们也难免会遇到View的滑动的处理。其实不管是那种滑动的方式基本思想都是类似的:当触摸事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后的触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标。原创 2016-02-28 17:19:31 · 21712 阅读 · 11 评论 -
Android View体系(一)视图坐标系
Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系、View的滑动、View的事件分发等文章来逐步介绍Android View体系。原创 2016-02-23 19:25:28 · 29732 阅读 · 27 评论 -
Android IPC机制(五)用Socket实现跨进程聊天程序
Socket也称作“套接字“,是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。它分为流式套接字和数据包套接字,分别对应网络传输控制层的TCP和UDP协议。TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。它使用三次握手协议建立连接,并且提供了超时重传机制,具有很高的稳定性。UDP协议则是是一种无连接的协议,且不对传送数据包进行可靠性原创 2016-02-20 16:58:04 · 5782 阅读 · 4 评论 -
设计模式(二)单例模式的七种写法
面试的时候,问到许多年轻的Android开发他所会的设计模式是什么,基本上都会提到单例模式,但是对单例模式也是一知半解,在Android开发中我们经常会运用单例模式,所以我们还是要更了解单例模式才对。**定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。**原创 2016-01-17 10:29:15 · 74345 阅读 · 28 评论 -
Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠
此文的代码在 Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果代码的基础上进行修改,如果你没有看过本系列的第一篇文章最好先看一看。原创 2016-01-16 00:20:44 · 19675 阅读 · 14 评论 -
设计模式(一)设计六大原则
1. 单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因。 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到破坏。 比如我经常看到一些Android开发在Ac原创 2016-01-10 16:44:08 · 15612 阅读 · 6 评论 -
Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用
在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户端显然是不合适的。另外,Messenger用来进程间进行数据传递但是却不能满足跨进程的方法调用,接下来我们来使用AIDL来实现跨进程方原创 2016-01-09 16:51:02 · 11213 阅读 · 1 评论 -
Android IPC机制(二)用Messenger进行进程间通信
本来想写Binder的,笔者很多年前研究Android Native Framework时才了解到的,实话说对应用层的开发帮助不大,网上文章也比较多,如果想了解可以参考Android Bander设计与实现 - 设计篇这篇文章。另外在看这篇文章前最好看一下本文章的前篇Android IPC机制(一)开启多进程。首先我们先写服务端(MessengerService.java),在onBind方法原创 2016-01-03 11:53:14 · 7357 阅读 · 9 评论 -
Android Design Support Library(二)用NavigationView实现抽屉菜单界面
NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。这次,在Android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。这次我们写的代码在Android用TabLayout实现类似网易选项卡动态滑动效果这篇文章代码的基础上进行修改,所以最好先看看上面这篇文章原创 2016-01-01 15:52:05 · 8393 阅读 · 0 评论 -
Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果
此前我们用HorizontalScrollView也实现了类似网易选项卡动态滑动效果,详见 Android选项卡动态滑动效果这篇文章这里我们用TabLayout来实现这一效果。TabLayout是Android Design Support Library库中的控件。 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And原创 2015-12-27 16:58:57 · 28529 阅读 · 17 评论 -
Android IPC机制(一)开启多进程
1. 为何要开启多进程 为何开启android应用要开启多进程,主要有以下几点:单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的硬件的提升和android系统的改进,虽然可分配内存越来越多,但仍旧可以通过开启多进程来获取更多的内存来处理自己App的业务独立运行的组件,比如个推,它的服务会另开一个进程。2. 开启多进程 首原创 2016-01-02 13:44:49 · 16393 阅读 · 9 评论 -
Android选项卡动态滑动效果
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent原创 2015-12-20 14:03:38 · 14531 阅读 · 17 评论 -
Android5.x Toolbar和Palette应用解析
对于已经被不大好用的Actionbar折磨的开发者来说,Toolbar的出现确实是一个好消息,Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar有关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,具体的使用方法和Actionbar很类似。1. 引入Toolbar 由于用的a原创 2015-12-07 09:59:42 · 4620 阅读 · 4 评论 -
Android 实现广告Banner循环轮播
做了很多的App,发现广告Banner非常的常用,在这里就总结一下我的做法,先看看一个应用的广告Banner 1. ViewPager中展示和下载图片下面我们来实现一个类似的广告Banner,主布局界面<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/ap原创 2015-12-05 14:01:01 · 12138 阅读 · 3 评论 -
Android5.x Notification应用解析
Notification可以让我们在获得消息的时候,在状态栏,锁屏界面来显示相应的信息,很难想象如果没有Notification,那我们的qq和微信以及其他应用没法主动通知我们,我们就需要时时的看手机来检查是否有新的信息和提醒着实让人烦心,也体现出Notification重要性。这里会介绍三种Notification,分别是普通的Notification,折叠式Notification和悬挂式Not原创 2015-12-04 00:08:21 · 23521 阅读 · 31 评论 -
Android5.x CardView 应用解析
android 5.0版本中新增了CardView, CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。也可以布局其他View。 如果sdk低于5.0我们仍旧要引入v7包,我用的是android studio所以我们需要在build.gradle加入如下代码用来自动导入support-v7包,记得配置完后重新Build一下工程。depend原创 2015-12-03 11:19:51 · 5911 阅读 · 7 评论 -
Android5.x RecyclerView 应用解析
有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,更高的效率,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现更加丰富多样效果。 但是RecyclerView也有缺点和让人头疼的地方:设置列表的分割线时需要自定义,原创 2015-12-02 21:12:36 · 9648 阅读 · 0 评论 -
Android View体系(三)属性动画
随着android3.0属性动画的推出,视图动画就不再风光,相比属性动画视图动画非常大的缺陷是不具有交互性,当某个元素发生视图动画后,其响应事件的位置依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但是它的优点也非常明显:效率比较高使用也方便。原创 2015-11-17 14:16:54 · 4791 阅读 · 1 评论 -
Android处理错误json数据
此前一直都没遇到也一直相信服务端返回的json数据基本是正确的,直到我们的android端一直崩溃,并在友盟上查到一直报如下的错误:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $原创 2015-09-15 16:00:12 · 6602 阅读 · 0 评论 -
Android图片压缩工具类
网上用了很多压缩图片的方法都不是很理想,这个工具类比较靠谱可以将5,6M的图片压缩到60到70Kimport java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.OutputStream;import android.content.Con原创 2015-09-13 19:27:44 · 6237 阅读 · 10 评论 -
Android友盟增量更新
1.增量升级的原理 增量更新的原理就是将本地apk与服务器端最新版本比对,并得到差异包。比如现在的版本是1.1.4,大小是7.2M,新版本是1.1.5.大小是7.3M。我们发现两个版本只有0.1M的差异,这样我们如果采用增量升级生成0.1M左右的差异包,这样用户只需要下载0.1M的差异包进行升级而不需要重新下载7.3M的新版本了。2.以往增量升级的实现 首先要有服务端来生成差异包,这一步使原创 2015-08-13 16:38:12 · 7148 阅读 · 5 评论