自定义博客皮肤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进阶三部曲 - 刘望舒

独立博客 http://liuwangshu.cn 公号:刘望舒

  • 博客(298)
  • 资源 (12)
  • 收藏
  • 关注

原创 Android View体系(一)视图坐标系

Android View体系是界面编程的核心,他的重要性不亚于Android四大组件,在这个系列中我会陆续讲到View坐标系、View的滑动、View的事件分发等文章来逐步介绍Android View体系。

2016-02-23 19:25:28 30238 27

原创 Android IPC机制(五)用Socket实现跨进程聊天程序

Socket也称作“套接字“,是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。它分为流式套接字和数据包套接字,分别对应网络传输控制层的TCP和UDP协议。TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。它使用三次握手协议建立连接,并且提供了超时重传机制,具有很高的稳定性。UDP协议则是是一种无连接的协议,且不对传送数据包进行可靠性

2016-02-20 16:58:04 5838 4

原创 Swift快速入门(四)流程控制

Swift提供两种常见的分支控制结构:if语句和swich语句。一般来说,当条件简单且可能情况较少时使用if语句;当条件比较复杂情况较多时则可以考虑使用swich语句...

2016-02-15 10:58:12 3190

原创 Java并发编程(三)volatile域

有时仅仅为了读写一个或者两个实例域就使用同步的话,显得开销过大,volatile关键字为实例域的同步访问提供了免锁的机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的。再讲到volatile关键字之前我们需要了解一下内存模型的相关概念以及并发编程中的三个特性:原子性,可见性和有序性。

2016-02-13 17:48:32 11056 3

原创 设计模式(四)简单工厂模式

简单工厂模式属于创建型模式又叫做静态工厂方法模式,是由一个工厂对象决定创建出哪一种产品类的实例。

2016-02-12 17:19:06 13222 9

原创 设计模式(三)建造者模式

建造者模式(builder)是创建一个复杂对象的创建型模式,将构建复杂对象的过程和它的部件解耦,使得构建过程和部件的表示分离开来。例如我们要DIY一个台式机电脑,我们找到DIY商家,我们可以要求这台电脑的cpu或者主板或者其他的部件都是什么牌子的什么配置的,这些部件是我们可以根据我们的需求来变化的,但是这些部件组装成电脑的过程是一样的,我们不需要知道这些部件是怎样组装成电脑的,我们只需要提供部件的牌子和配置就可以了

2016-02-11 13:43:14 8228 8

原创 Swift快速入门(三)运算符

赋值运算符 、算术运算符、溢出运算符、位运算符、范围运算符、范围运算符、比较运算符、逻辑运算符、nil合并运算符。

2016-02-08 16:37:28 7087

原创 Swift快速入门(二)基本数据类型

1.变量和常量 Swfit是强类型的语言,Swift要求所有的变量和常量必须先声明后使用。 声明变量需要使用var,声明常量则需要使用letvar 变量名[:类型] =初始值let 常量名[:类型] =初始值

2016-02-01 01:09:30 6128

原创 Android IPC机制(四)用ContentProvider进行进程间通信

ContentProvider为存储和获取数据提供统一的接口,它可以在不同的应用程序之间共享数据,本身就是适合进程间通信的。ContentProvider底层实现也是Binder,但是使用起来比AIDL要容易许多。系统也预制了很多的ContentProvider,例如通讯录,音视频等,这些操作本身就是跨进程进行通信。这篇文章主要是我们来自己实现用ContentProvider来进行进程间通信,而非介绍ContentP

2016-01-29 17:00:40 8990 1

原创 Swift快速入门(一)第一个Swift程序

1. 本系列说明 本系列只是一个Swift快速入门的教程,并没有详尽的介绍Swift,Swift也并不是一个简单的编程语言,所以要想详尽的系统的学习Swift,本系列并不适合你,此系列只是让开发者可以快速的用Swift来进行开发。另外学习本系列并不需要obj-c的知识,但是如果你想开发iOS,obj-c是必须要学的,因为Swift并不能很快的替代obj-c。2.Swift介绍 Swift,

2016-01-23 14:30:02 14016

原创 设计模式(二)单例模式的七种写法

面试的时候,问到许多年轻的Android开发他所会的设计模式是什么,基本上都会提到单例模式,但是对单例模式也是一知半解,在Android开发中我们经常会运用单例模式,所以我们还是要更了解单例模式才对。**定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。**

2016-01-17 10:29:15 74820 28

原创 Android Design Support Library(三)用CoordinatorLayout实现Toolbar隐藏和折叠

此文的代码在 Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果代码的基础上进行修改,如果你没有看过本系列的第一篇文章最好先看一看。

2016-01-16 00:20:44 19734 14

原创 设计模式(一)设计六大原则

1. 单一职责原则(SRP) 定义:就一个类而言,应该仅有一个引起它变化的原因。 从这句定义我们很难理解它的含义,通俗讲就是我们不要让一个类承担过多的职责。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到破坏。 比如我经常看到一些Android开发在Ac

2016-01-10 16:44:08 15692 6

原创 Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用

在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户端显然是不合适的。另外,Messenger用来进程间进行数据传递但是却不能满足跨进程的方法调用,接下来我们来使用AIDL来实现跨进程方

2016-01-09 16:51:02 11266 1

原创 Android IPC机制(二)用Messenger进行进程间通信

本来想写Binder的,笔者很多年前研究Android Native Framework时才了解到的,实话说对应用层的开发帮助不大,网上文章也比较多,如果想了解可以参考Android Bander设计与实现 - 设计篇这篇文章。另外在看这篇文章前最好看一下本文章的前篇Android IPC机制(一)开启多进程。首先我们先写服务端(MessengerService.java),在onBind方法

2016-01-03 11:53:14 7414 9

原创 Android IPC机制(一)开启多进程

1. 为何要开启多进程 为何开启android应用要开启多进程,主要有以下几点:单进程所分配的内存不够,需要更多的内存。在早期android系统只为一个单进程的应用分配了16M的可用内存,随着手机的硬件的提升和android系统的改进,虽然可分配内存越来越多,但仍旧可以通过开启多进程来获取更多的内存来处理自己App的业务独立运行的组件,比如个推,它的服务会另开一个进程。2. 开启多进程 首

2016-01-02 13:44:49 16456 9

原创 Android Design Support Library(二)用NavigationView实现抽屉菜单界面

NavigationView在MD设计中非常重要,之前Google也提出了使用DrawerLayout来实现导航抽屉。这次,在Android Design Support Library中,Google提供了NavigationView来实现导航菜单界面。这次我们写的代码在Android用TabLayout实现类似网易选项卡动态滑动效果这篇文章代码的基础上进行修改,所以最好先看看上面这篇文章

2016-01-01 15:52:05 8440

原创 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 28568 17

原创 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 14577 17

原创 Java并发编程(二)同步

如果你的java基础较弱,或者不大了解java多线程请先看这篇文章java多线程(一)线程定义、状态和属性同步一直是java多线程的难点,在我们做android开发时也很少应用,但这并不是我们不熟悉同步的理由。希望这篇文章能使更多的人能够了解并且应用java的同步。 在多线程的应用总,两个或者两个以上的线程需要共享对同一个数据的存取。如果两个线程存取相同的对象,并且每一个线程都调用了修改该对

2015-12-15 14:04:20 3691 6

原创 Android5.x Toolbar和Palette应用解析

对于已经被不大好用的Actionbar折磨的开发者来说,Toolbar的出现确实是一个好消息,Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar有关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,具体的使用方法和Actionbar很类似。1. 引入Toolbar 由于用的a

2015-12-07 09:59:42 4638 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 12196 3

原创 Android5.x Notification应用解析

Notification可以让我们在获得消息的时候,在状态栏,锁屏界面来显示相应的信息,很难想象如果没有Notification,那我们的qq和微信以及其他应用没法主动通知我们,我们就需要时时的看手机来检查是否有新的信息和提醒着实让人烦心,也体现出Notification重要性。这里会介绍三种Notification,分别是普通的Notification,折叠式Notification和悬挂式Not

2015-12-04 00:08:21 23547 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 5937 7

原创 Android5.x RecyclerView 应用解析

有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,更高的效率,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现更加丰富多样效果。 但是RecyclerView也有缺点和让人头疼的地方:设置列表的分割线时需要自定义,

2015-12-02 21:12:36 9668

原创 Android View体系(三)属性动画

随着android3.0属性动画的推出,视图动画就不再风光,相比属性动画视图动画非常大的缺陷是不具有交互性,当某个元素发生视图动画后,其响应事件的位置依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但是它的优点也非常明显:效率比较高使用也方便。

2015-11-17 14:16:54 4847 1

原创 Java并发编程(一)线程定义、状态和属性

一 、线程和进程1. 什么是线程和进程的区别: 线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在java语言中,线程有四种状态:运行 、就绪、挂起和结束。 进程是指一段正在执行的程序。而线程有事也被成为轻量级的进程,他得程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内功空间(代码段、数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程都拥

2015-10-05 15:30:31 10159

原创 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 6631

原创 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 6256 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 7159 5

原创 git报错 fatal:open /dev/null or dup failed: No such file or directory

今天突然发现git无法做任何操作了,报了上面的错,各种百度谷歌都没有得到解决的方案。我重装了git,重启电脑仍然没有解决,开来不是git软件的问题而是系统问题。 解决方案:

2015-08-04 09:10:23 19793 12

原创 Gson解析json数据

json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Json,阿里的FastJson,还有一个jackJson。有人说jackJson解析速度快,大数据时FastJson要比Json效率高,小数据时反之。不过我还是偏爱谷歌的Json,即使效率可能偏低,但是稳定性肯定没得说

2015-04-22 09:49:41 38355 2

原创 Android多线程(二)AsyncTask源码分析

AsyncTask的基本用法这里就不在赘述了,基本是个安卓开发者就会。1.android 3.0以前的 AsyncTaskprivate static final int CORE_POOL_SIZE = 5; private static final int MAXIMUM_POOL_SIZE = 128; private static final int KEEP_AL

2015-04-14 18:45:33 4459

原创 Android多线程(一)线程池

1.  new Thread  new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 这是最基本的开启线程的方式(实现Runnable接口),我们在初学安卓或者

2015-04-09 08:53:54 12021 2

原创 ActionBar-PullToRefresh的使用

下载第三方控件和所需的资源ActionBar-PullToRefresh:https://github.com/chrisbanes/ActionBar-PullToRefreshSmoothProgressBar:https://github.com/castorflex/SmoothProgressBar导入SmoothProgressBar下面有两个文件夹 java 和

2014-11-18 15:08:23 7469 3

转载 ViewStub的应用

在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Infl

2014-06-23 16:23:25 1500

转载 Android 内存溢出解决方案(OOM) 整理总结

在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总结,以供朋友们共同交流学习,也供自己以后在解决OOM问题上有所提高,提前讲下,片幅有点长,涉及的东西太多,大家耐心看,肯定有收获的,里面的很多东西小马也是学习参考网络资料使用的,先来简单讲下下:

2014-04-12 09:32:20 2179

原创 Android隐藏应用程序的图标

第一种:PackageManager p = getPackageManager();  p.setComponentEnabledSetting(getComponentName(), PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, PackageManager.DONT_KILL_APP);

2014-01-24 13:12:58 10579

原创 Android点击链接启动应用

首先要在Androidmanifest.xml ,在闪屏的activity写上这样的配置<activity android:name="cn.safetrip.edog.SplashScreenActivity" android:screenOrientation="portrait" android:theme=

2013-11-06 10:49:09 2631

转载 java生产者消费者问题实现

/**  *经典生产者与消费者问题:生产者不断的往仓库中存放产品,消费者从仓库中消费产品。  *其中生产者和消费者都可以有若干个。仓库容量有限,库满时不能存放,库空时不能取产品   */    public class ProducersAndConsumers {      public static void main(String[] args) {

2013-08-07 20:58:46 1777

MyTabLayout2

此前我们用HorizontalScrollView也实现了类似网易选项卡动态滑动效果 Android选项卡动态滑动效果 这里我们用TabLayout来实现这一效果。TabLayout是Android Design Support Library库中的控件。 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提供了更加规范的MD设计风格的控件。最重要的是,Android Design Support Library的兼容性更广,直接可以向下兼容到Android 2.2。

2015-12-27

MyTabLayout

这里我们用TabLayout来实现这一效果。TabLayout是Android Design Support Library库中的控件。 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个support库里面,Google给我们提供了更加规范的MD设计风格的控件。最重要的是,Android Design Support Library的兼容性更广,直接可以向下兼容到Android 2.2。

2015-12-27

MySlideTabbar

本文会实现一个类似网易新闻(不说网易新闻大家可能不知道大概是什么样子)点击超多选项卡,选项卡动态滑动的效果。

2015-12-20

MoonToolbar2

对于已经被不大好用的Actionbar折磨的开发者来说,Toolbar的出现确实是一个好消息,Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar有关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,具体的使用方法和Actionbar很类似。

2015-12-04

MoonToolbar

对于已经被不大好用的Actionbar折磨的开发者来说,Toolbar的出现确实是一个好消息,Toolbar是应用的内容的标准工具栏,可以说是Actionbar的升级版,两者不是独立关系,要使用Toolbar还是得跟ActionBar有关系的。相比Actionbar Toolbar最明显的一点就是变得很自由,可随处放置,具体的使用方法和Actionbar很类似。

2015-12-02

MyBannerCsdn

做了很多的App,发现广告Banner非常的常用,在这里就总结一下我的做法

2015-12-01

MyNotification

Notification可以让我们在获得消息的时候,在状态栏,锁屏界面来显示相应的信息,很难想象如果没有Notification,那我们的qq和微信以及其他应用没法主动通知我们,我们就需要时时的看手机来检查是否有新的信息和提醒着实让人烦心,也体现出Notification重要性。这里会介绍三种Notification,分别是普通的Notification,折叠式Notification和悬挂式Notification。

2015-11-29

MyCardView2

android 5.0版本中新增了CardView, CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。也可以布局其他View。

2015-11-27

RecyclerView

有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现更加丰富多样效果。 但是RecyclerView也有缺点和让人头疼的地方:设置列表的分割线时需要自定义,另外列表的点击事件需要自己去实现。

2015-11-25

MyRecyclerView

有了ListView、GridView为什么还需要RecyclerView这样的控件呢?整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现更加丰富多样效果。 但是RecyclerView也有缺点和让人头疼的地方:设置列表的分割线时需要自定义,另外列表的点击事件需要自己去实现。

2015-11-25

Gson免费下载(包含开发包,源码,文档)

json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Json,阿里的FastJson,还有一个jackJson。有人说jackJson解析速度快,大数据时FastJson要比Json效率高,小数据时反之。不过我还是偏爱谷歌的Json,即使效率可能偏低,但是稳定性肯定没得说,FastJson和jackJson就不知道了。

2015-04-21

GSON免费下载

Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。

2015-04-21

空空如也

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

TA关注的人

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