自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 资源 (33)
  • 收藏
  • 关注

原创 Android性能优化之Splash页应该这样设计

目前SplashActivity的设计目前市场上的应用在启动时基本上都会先启动一个SplashActivity,作为一个欢迎界面,为什么这样设计呢? 个人总结有三个优点:1、可以给用户更好的体验比如:可以由后台动态的改变欢迎的图片,或者显欢迎xxx回来,新浪微博的就是这种交互。2、可以缩减App的启动时间由上一篇博文中知道app启动的耗时主要是在Application初始化中和MainActivi

2016-01-17 00:18:28 14344 20

原创 Android性能优化之加快应用启动速度

应用的启动启动方式通常来说,在安卓中应用的启动方式分为两种:冷启动和热启动。 1、冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。 2、热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有

2016-01-14 22:51:55 15773 9

原创 Android性能优化之被忽视的优化点

对于性能优化这个知识点来说,实在是太广了,博主本人也一直非常关注这方面的学习,而对于性能优化来说它包括了非常非常非常多方面,比如:I/O的优化、网络操作的优化、内存的优化、数据结构的优化、代码层次的优化、UI渲染优化、CPU资源使用率的优化、异常处理的优化等等等等。。。本篇文章就博主本人的理解来讲述一些在Android开发中可以优化的地方ArrayList和VectorArrayList和Vecto

2015-11-25 15:44:46 18070 18

原创 Android性能优化之常见的内存泄漏

前言对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary、MAT等工具来检测应用程序是否存在内存泄漏,MAT是一款强大的内存分析工具,功能繁多而复杂,而LeakCanary则是由Square开源的一款轻量第三方内存泄漏检测工具,当它检测到程序中有内存泄漏的产生时,它将以最直观的

2015-11-23 22:37:53 30439 34

原创 Android性能优化之使用线程池处理异步任务

说到线程,我想大家都不陌生,因为在开发时候或多或少都会用到线程,而通常创建线程有两种方式: 1、继承Thread类 2、实现Runnable接口虽说这两种方式都可以创建出一个线程,不过它们之间还是有一点区别的,主要区别在于在多线程访问同一资源的情况下,用Runnable接口创建的线程可以处理同一资源,而用Thread类创建的线程则各自独立处理,各自拥有自己的资源。所以,在Java中大多数

2015-11-17 16:06:14 51508 38

原创 我的第二个独立开发的邮箱类App—“简邮”(支持QQ、雅虎、阿里云、Outlook)

360手机市场地址:360市场其它市场还在审核,囧。。。为什么做这个App? 主要有两个原因 1、10月份正逢校招季,……当时和面试官介绍了这个APP 2、在苹果手机上看到一款内置的邮箱app支持多账户,收发邮件非常方便,于是想在Android上弄一个怎样使用简邮首先,这是移动端能支持邮件操作的基础!!!这是移动端能支持邮件操作的基础!!!这是移动端能支持邮件操作的基础!!! 重

2015-11-09 11:26:50 9667 16

原创 Android最佳实践之SystemBar状态栏全版本适配方案

前言自从MD设计规范出来后,关于系统状态栏的适配越受到关注,因为MD在5.0以后把系统状态栏的颜色改为可由开发者配置的,而在5.0之前则无法指定状态栏的颜色,所以这篇就说说使用Toolbar对系统状态栏的适配策略主流App的适配效果手Q在这方面适配非常好,将标题栏和状态栏合为一起了,和iOS效果一模一样,如下:4.4、5.0+4.4以下版本4.4以下版本则是系统默认的黑色状态栏,因为4.4以下没办法

2016-02-18 11:28:30 8119 5

原创 关于生产者/消费者/订阅者模式的那些事

生产者/消费者模式简介用来干嘛的?生产者/消费者模式的产生主要目的就是为了解决非同步的生产与消费之间的问题。什么是非同步呢? 比如我刚刚生产了某个产品,而此时你正在打游戏,没空来取,要打完游戏来取,这就导致了我生产产品和你取产品是两个非同步的动作,你不知道我什么时候生产完产品,而我也不知道你什么时候来取。而生产者/消费者模式就是解决这个非同步问题的,因为肯定不可能我生产完一个就给你打个电话

2016-01-27 14:17:45 4403 3

原创 并发编程之ThreadLocal、Volatile、synchronized、Atomic关键字扫盲

前言对于ThreadLocal、Volatile、synchronized、Atomic这四个关键字,我想一提及到大家肯定都想到的是解决在多线程并发环境下资源的共享问题,但是要细说每一个的特点、区别、应用场景、内部实现等,却可能模糊不清,说不出个所以然来,所以,本文就对这几个关键字做一些作用、特点、实现上的讲解。1、Atomic作用对于原子操作类,Java的concurrent并发包中主要为我们提供

2016-01-21 10:25:28 16973 14

原创 Fresco图片框架内部实现原理探索

流行的网络框架目前流行的网络图片框架: Picasso、Universal Image Loader、Volley的(ImageLoader、NetworkImageView)、Glide和Fresco简明的介绍下(具体细节和功能可看源码和wiki): 其中Picasso和Universal Image Loader相比其它的算是最轻量级的图片框架了,它们拥有较少的方法数,Universal I

2016-01-04 18:38:21 16387 13

原创 Android之SharedPreferences内部原理浅析

SharedPreferences内部工作原理: 1、调用getSharedPreferences();创建一个SharedPreferences对象,其中会先判断是否存在对应xml文件,如果发现存在则会有一个预加载操作,这个操作是把xml文件的内容通过I/O操作和XmlUitl解析后存入一个map对象中,所以我们调用SharedPreferences::getString();等get操作实际上

2015-12-04 17:23:50 8241 3

原创 Material Design Library 23.1.0的新变化与代码实战

Design Library出来已经快有一个月了,当时大概看了一下介绍这个新版本变化的译文,内容不多,给我印象最深的就是Percent lib、AppBarLayout 和NavigationView的变化,当然还有Design Lib的一些控件内部实现的变化没有介绍,从而使得在使用新版本的控件时候难免因为版本的不同会发生一些异常,而本人正好在上个星期对一个项目换库时发现了这个问题,什么问题呢?Na

2015-11-13 15:42:41 4527 3

原创 LocalBroadcastManager—创建更高效、更安全的广播

前言在写Android应用时候,有时候或多或少的需要运用广播来解决某些需求,我们知道广播有一个特性,就是使用sendBroadcast(intent);发送广播时,手机内所有注册了BroadcastReceiver的应用都可以在接收到这个广播的,并在BroadcastReceiver的onReceive()方法进行匹配,而应用是否使用这个广播则是取决与我们定义的Action与广播接收者的是否匹配,也

2015-11-10 17:45:59 8916 6

原创 版本控制—使用Gradle自动管理应用程序版本

我们在开发App时,通常在项目的Release阶段我们需要设置应用的版本号和版本名称,也就是设置下面两个属性 versionCode versionName 版本号其中versionCode的值是int类型,主要作用就是作为应用内部的版本编号,为版本升级提供唯一的标识,通常设为是自增的,假如当前app的versionCode为1,下一代app的versionCode为2,那么就可以通过它

2015-11-07 13:10:35 3897

原创 Volley网络框架完全解析(使用篇)

在Android中,网络请求无非就这两种:HttpURLConnection和HttpClient( Apache),我们在使用时一般都会对它们进行一系列的封装,但是这过程不免有些繁琐,所以,Google官方也考虑到了这点,在2013年Google I/O大会上就推出了一个新的网络请求框架——Volley,它将各种网络请求都简单化,并且把AsyncHttpClient和Universal-Image

2015-10-13 11:23:58 5417 4

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

差不多一个月没更博了,主要是自己在写东西,今天写写Android开发中比较重要的观察者设计模式 所谓观察者模式,就是一个是被观察的对象,一个是观察者对象,通过建立联系,即被观察的对象被观察者观察了,而当被观察的对象内部数据发生了改变时候,就会及时通知观察者,进而更新数据的显示。举个栗子: 假如A是一个学生,他有一个名字,而B是显示该学生名字的界面,假如这时候有一个C界面有更改该学生的名字的操作,

2015-10-13 09:29:02 1304

原创 Android开发你不知道的TIPS

1、Space space是Android 4.0中新增的一个控件,它实际上可以用来分隔不同的控件,其中形成一个空白的区域.这是一个轻量级的视图组件,它可以跳过Draw,对于需要占位符的任何场景来说都是很棒的2、ValueAnimator.reverse() 这个方法可以很顺利地取消正在运行的动画3、DateUtils.formatDateTime() 用来进行区域格式化工作,输出格式化和本地化的时

2015-10-04 15:44:40 1572

原创 ORM对象关系映射之使用GreenDAO进行CRUD操作

在Android中,我们都知道使用的数据库是SQLite,而使用这种原生的数据库非常繁琐,它对表的管理和进行CRUD操作都需要我们写sql语句,在进行多表关联的操作上,更是需要写一堆sql,而且维护起来也极其不便。所以ORM程序设计技术应用而生,它主要是用于实现面向对象编程语言里不同类型系统的数据之间的转换。目前流行的ORM框架目前主要流行这么三款ORM框架:ORMLite(官网)ActiveA

2015-09-21 16:46:23 4246 4

原创 Android事件分发机制

【注】:这篇文章中的内容都以这张图来讲解分发机制,其中A、B、C都是ViewGroup,它们的层次关系为:A为根布局,B为二级子布局,C为三级子布局,其中C布局中包含一个Button按钮,即A包含B,B包含C,C包含Button。 好了,废话少说。先来讲下今天的三位主角吧。 1、dispatchTouchEvent - 分发事件,默认为false。true:取消事件,不继续向下分发,false

2015-09-17 08:58:33 2024

原创 ORM对象关系映射之GreenDAO自定义属性转换器PropertyConverter

在使用GreenDAO定义实体的属性时候,通常来说定义的实体属性名就是对应的表的字段名、实体中属性的类型(如Long、String等)就是表的字段名类型,但是我们难免会有不一样的需求,比如实体中我定义了一个Color类型的属性或者其它自定义类型的属性,而表的字段类型只有一些原始类型肯定是没有这些类型的,所以这时候该怎么办呢? 不用急,GreenDAO给我们提供了一个强大的工具,就是属性转换器:Pr

2015-09-16 18:08:51 4385 2

原创 ORM对象关系映射之GreenDAO建立多表关联

利用GreenDAO可以非常方便的建立多张表之间的关联一对一关联通常我们在操作数据库的时候,我们往往不是单独的对一张表进行操作,而是对这张表的操作会联动的影响另外一张表或者多张表,比如:现在有两张表,一张是用户User表(有name、age、sex三个字段),一张是头像Picture表(有pictureId、pictureName、width、height四个字段)。假如用户表和头像表是一对一关系,

2015-09-16 16:36:49 12669 4

原创 ORM对象关系映射之GreenDAO高级用法

CRUD增加:dao.insert(Student entity);//添加一个dao.insertInTx(Student... entity);//批量添加删除:dao.deleteByKey(Long key);//根据主键删除dao.deleteByKeyInTx(Long... keys);//批量删除dao.delete(Student entity);//根据实体删除dao.d

2015-09-15 19:48:43 5578 1

原创 ORM对象关系映射之GreenDAO源码解析

上一篇我们学习了GreenDAO的CRUD基本操作,可以说是非常的方便的,而且GreenDAO的效率和性能远远高于其它两款流行的ORM框架,下面是我从官网找的一副它们三个ORM框架之间的性能测试的直观图: 那么这篇我们就从源码的角度来学习GreenDAO更深层次的工作原理。GreenDAO的工作原理图解:从上篇我们知道,如果Android项目中要使用GreenDAO框架,需要先创建一个Java

2015-09-15 16:21:33 5592 1

原创 Android中让多个线程顺序执行探究

前言: 不知道从什么时候开始,越来越喜欢把平时学到的一些东西做个总结,做个梳理,于是坚持写博客。在我看来写博客是对自己的一种提升,也可以帮助在这个问题上有疑惑的猿。之前看到这样一个问题,就是有人因自己的技术还不扎实,想写博客,又怕写出来的博客怕别人说不正确。对于这种问题,我更多的是把写博客看成自己技术的总结,因为你总结一个技术,肯定是需要查大量资料,而在此过程中你不仅巩固了以前的知识也会不断的

2015-09-14 10:27:15 7916 4

原创 Android免Root无侵入AOP框架Dexposed

Dexposed框架是阿里巴巴无线事业部近期开源的一款在Android平台下的免Root无侵入运行期AOP框架,该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录,性能统计,安全控制,事务处理,异常处理等方面。针对Android平台,Dexposed只支持函数级别的在线热更新,如对已经发布在应用市场上的宿主APK,当我们从crash统计平台上发现某个函数调用有bug,导致经常性cra

2015-09-09 14:48:35 4518 1

原创 Kotlin For Android 示例代码实战

下面就为大家介绍怎么使用Kotlin来开发Android 上面这篇中我们在下载Kotlin插件的时候也下了一个功能扩张插件,其实这个插件大有用处,它可以使得我们在不使用注解和第三方库的情况下不使用findViewById来实例化控件,我们只需要导入对应的布局然后直接使用id来使用这个View就可以了。扩展功能插件的使用要使用这个功能: 1、首先需要导入这个插件的依赖,在Module的gradle

2015-09-08 11:56:38 4553 1

原创 Android Studio中创建Kotlin For Android项目

Kotlin俗称Android中的Swift,它是Jetbrains公司开发的基于JVM的一门语言,JetBrains公司可能大家并不熟悉,不过相信IntelliJ IDE大家一定知道,Android Studio正是基于它开发的,Kotlin本身也是面向对象语言。为什么要使用Kotlin?它具有如下优点: 1、轻量级 2、和Java具有高度的交互性,可以和Java代码一起运行 3、

2015-09-08 11:01:45 4933

原创 Android性能优化之界面UI篇

1、使用style、color、string、dimen样式来分离xml布局文件,减少代码的重复使用,增加代码复用率,防止hardcode,下面是一个例子: 在定义layout时候,因为每个View或ViewGroup都必须要有layout_width和layout_height,所以我们可以专门定义一个size_style.xml,里面的内容为:<resources> <style na

2015-09-07 13:37:42 2304 1

原创 Otto事件总线框架的使用

Otto是一个在Android中的事件总线框架,它是square的一个开源框架,具体介绍点击这里,项目下载点击这里为什么要使用Otto事件总线: 通常来说在Android中: 1、Activity与Activity间的传值是通过Intent,值回调是通过startActivityForResult() 2、Activity与Fragment间的传值是通过setArguments,值回

2015-09-06 16:03:24 4329

原创 Material Design之视图状态改变

视图状态改变是通过StateListAnimator动画集来改变View的状态的,它可以使View在不同状态下发生不同的变化,如下是在drawable目录下定义一个StateListAnimator:<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/an

2015-09-06 09:51:00 3156 3

原创 Android使用SVG矢量动画(二)

上篇我们学习了怎么显示SVG矢量图像,当然还有一个更强大的功能,就是让SVG图像动起来,先上一张效果图吧: 要实现上述动画效果,就得用AnimatedVectorDrawable这个类了,它就是负责VectorDrawable矢量图形的动画的,不过我们不能像属性动画那样去通过代码进行设置动画,而是需要通过animated-vector标签在xml文件中创建一个AnimatedVectorDrawa

2015-09-02 15:25:17 6434 5

原创 Android中使用SVG矢量图(一)

SVG矢量图介绍首先要解释下什么是矢量图像,什么是位图图像? 1、矢量图像:SVG (Scalable Vector Graphics, 可伸缩矢量图形) 是W3C 推出的一种开放标准的文本式矢量图形描述语言,他是基于XML的、专门为网络而设计的图像格式,SVG是一种采用XML来描述二维图形的语言,所以它可以直接打开xml文件来修改和编辑。 2、位图图像:位图图像的存储单位是图像上每一点的像素值

2015-09-02 13:46:37 8243

原创 Android百分比布局支持库(android-percent-support)

Android中提供了五种布局,其中用的最多的就是:LinearLayout, RelativeLayout 和 FrameLayout这三种布局,在对某一界面进行布局时最先想到也是通过这三种来布局的,不过当某一界面过于复杂时,往往会有多层嵌套,可能嵌套层数过深超过5层,比如,当我们有一个需求是这样的:界面中的一个按钮的长度需要是屏幕宽度的一半,而且需要在任何屏幕下都是屏幕宽度的一半,这个需求我们往

2015-09-02 09:30:05 3977

原创 Android主题切换—夜间/白天模式探究

现在市面上众多阅读类App都提供了两种主题:白天or夜间。 上述两幅图片,正是两款App的夜间模式效果,所以,依据这个功能,来看看切换主题到底是怎么实现的(当然现在github有好多PluginTheme开源插件,很多时候可以使用这些插件,不过我并不想讲怎么用那些插件,正所谓会用轮子还不如会造轮子)。关于更换主题和换肤这里提到是做换主题功能,当然与之类似的就是换肤,换肤现在比较流行的是采用插件化动

2015-08-29 16:50:58 8479 9

原创 Material Design5.x动画实现解析篇一

Material Design设计语言动画篇共推出六种类型的动画效果: 1、Touch feedback(触摸反馈) 2、Reveal effect(揭露效果) 3、Activity transitions(Activity转换效果) 4、Curved motion(曲线运动) 5、View state changes (视图状态改变) 6、Animate Vect

2015-08-28 11:17:56 6211 7

原创 RecyclerView添加Header和Footer

使用过RecyclerView的同学就知道它并没有添加header和footer的方法,而ListView和GirdView都有,但是开发过程中难免有需求需要添加一个自定义的header或者footer,或者不同布局的Item。好了,我们知道如果在ListView中要添加不同的布局的item,都是通过重写getItemViewType()和getViewTypeCount()这两个方法来控制的,OK

2015-08-26 16:34:36 11337 3

原创 Android下拉上滑显示与隐藏Toolbar另一种实现

关于介绍就不说了,不使用嵌套滑动情况下,另一种实现,当然还可以用design包下的CoordinatorLayout.Behavior。比较简单直接添代码:继承RecyclerView.OnScrollListener重写onScrolled方法,同时定义两个抽象方法供我们处理隐藏和显示事件public abstract class RecyclerViewScrollListener extend

2015-08-26 15:25:47 13892 4

原创 Android性能优化典例(二)

1、使用 Maven 依赖方案代替使用导入jar包方案如果项目中需要用到第三方jar包,常用的做法是去网上下载后然后放入libs文件夹,再添加到项目依赖,不过,在Android Studio已经不推荐使用这套做法了,因为如果jar有更新,那么每次都要去下载最新版本然后删除历史依赖再添加新版本的依赖,这样做很繁琐,而在Android Studio中,这个问题使用Maven已经很好的解决了,因为AS中默

2015-08-24 17:02:42 2237

原创 Android实现RecyclerView侧滑删除和长按拖拽-ItemTouchHelper

RecyclerView这个被誉为ListView和GirdView的替代品,它的用法在之前的一篇博文中就已经讲过了,今天我们就来实现RecyclerView的侧滑删除和长按拖拽功能,实现这两个功能我们只需要一个类——ItemTouchHelperItemTouchHelperGoogle官方文档上是这么介绍的: This is a utility class to add swipe to d

2015-08-24 14:03:42 16974 7

原创 Android Studio使用Lint进行代码检查

Android Studio目前已经更新到1.4版本,它作为Google官方推荐的IDE,功能非常强大,其中提供了一套静态代码分析工具,它可以帮助我们检查项目中存在的问题,让我们更有规范性的开发App。它可以检查出:xml文件中是否存在hardcode硬编码、unused resources没有使用到的资源、probable bug可能的bug等等。那么现在我们来测试使用它看看:Android Li

2015-08-21 15:50:46 19724 3

GreenDAO的CRUD操作

GreenDAO的CRUD操作

2015-09-14

在线热更新Dexposed框架

在线热更新Dexposed框架

2015-09-09

SVG矢量动画

SVG矢量动画

2015-09-06

ThemeChangeDemo

android 主题切换

2015-08-29

materialdesign动画示例

materialdesign动画示例

2015-08-28

RecyclerViewHeaderAndFooter

RecyclerViewHeaderAndFooter添加头部和尾部

2015-08-26

RecylerView侧滑删除和拖拽

RecylerView侧滑删除和拖拽

2015-08-24

Android事件分发机制

Android事件分发机制测试Demo

2015-08-18

Volley请求网络图片

使用Volley请求网络图片防止OOM

2015-08-15

Volley.jar

Volley.jar

2015-08-12

Material CheckBox

Material Design 风格的checkbox,Material Design 风格的checkbox

2015-08-07

Android Data Binding

Android Data Binding结合RecyclerView的使用

2015-08-06

插件化开发-动态加载

插件化开发-动态加载已安装apk和未安装的apk

2015-07-29

DiskLruCacheDemo

DiskLruCacheDemo

2015-07-23

DiskLruCache

Google又提供了一套硬盘缓存的解决方案:DiskLruCache(非Google官方编写,但获得官方认证),怎么使用呢?下载好了之后,在项目中新建一个名为libcore.io包,然后将DiskLruCache.java代码文件复制到这个包中即可开始使用。

2015-07-23

LruCache使用

LruCache使用

2015-07-21

Material Design icon图标

Material Design icon图标

2015-07-19

FloatingActionButton的使用

Google提供的Design Library中FloatingActionButton的使用。 和配合Snackbar的使用

2015-07-19

ViewPager的使用

ViewPager的动画效果实现,利用Google提供的两种动画来说明自定义动画。

2015-07-19

CollapsingToolbarLayout使用 源码下载

CollapsingToolbarLayout作用是提供了一个可以折叠的Toolbar,它继承至FrameLayout,给它设置layout_scrollFlags,它可以控制包含在CollapsingToolbarLayout中的控件(如:ImageView、Toolbar)在响应layout_behavior事件时作出相应的scrollFlags滚动事件(移除屏幕或固定在屏幕顶端)。

2015-07-16

日期选择控件(可防止屏幕旋转抛出的异常)

日期选择控件(可防止屏幕旋转抛出的异常)

2015-07-13

AppBarLayout实现上滑隐藏ToolBar

AppBarLayout实现上滑隐藏ToolBar,下滑出现

2015-07-12

NavigationView实现侧滑菜单栏

将介绍使用Google最新推出规范式设计中的NavigationView和DrawerLayout结合实现侧滑菜单栏效果

2015-07-11

CardView的使用

CardView是support-v7包下的一个控件,google新推出的一款符合材料设计的Layout。。。

2015-07-11

RecyclerView实现瀑布流

RecyclerView实现瀑布流效果。

2015-07-04

RecyclerView的使用

提供一种插件式编程,开发者对RecyclerView的设计更加自由

2015-07-04

使用DialogFragment替代AlertDialog

Google官方推荐使用DialogFragment代替AlertDialog,很好的解决屏幕旋转产生的问题。。。

2015-05-25

ListView添加CheckBox复选框

在ListView中添加CheckBox,实现多选条目

2015-05-15

ViewFlipper详解demo

该demo主要是说明了ViewFlipper这个控件怎么使用,并加入动画效果和点击暂停过一段时间又自动切换,可谓是实现了ViewFlipper功能外又完善了它的自动切换效果

2015-02-26

android 指南针 源码

android 指南针 源码

2014-08-21

java实现的多媒体播放器

ava实现的简单多媒体播放器

2014-08-20

空空如也

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

TA关注的人

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