- 博客(60)
- 资源 (11)
- 收藏
- 关注

原创 【通知】本博客迁移到 http://sparkyuan.me/
通知折腾了一下午,终于通过 GitHub Pages + Hexo 搭好了属于自己的网站。虽然花了29块买了个域名,又选了好2个小时的主题,不过最终的结果还是很满意的。本博客停止更新,新的文章请访问:http://sparkyuan.me/ ヽ(✿゚▽゚)ノ
2016-03-11 20:28:19
1315
1

原创 一个特别适合新手练习的Android小项目——每日一妹纸
介绍当前版本V 1.2刚开始学习Android的时候,主要就是学习了一些Activity的生命周期,各种View和Layout的使用,SQLite等零散的知识点,这些东西市面上任何一本Android的入门书籍都会覆盖,但是学习完这些之后就有些迷茫了,不知道下一步该学一些什么?如果你也正好处于这个状态不妨看看这个开源项目。自己走过一些弯路,所以写了一个这样的App,希望可以对学习Android的新手有
2016-03-02 22:42:36
19711
6
原创 JVM运行时数据区域分析
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 原文链接:http://sparkyuan.me/2016/04/22/JVM运行时数据区域/ ,转载请注明出去程序计数器(PC)程序计数器(Program Counter Reg
2016-04-22 16:50:43
3113
原创 Android安全机制
Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性。 Linux内核安全机制Android的Linux内核包含了强制访问控制机制和自主访问控制机制。强制访问控制机
2016-04-05 15:08:10
1955
原创 从Android源码到apk——apk打包过程
Android程序是怎么从源码变成可以安装使用的apk的 流程官方版详细版上面就是一个关于构建过程的一个典型的流程图。aapt(Android Asset Packaging Tool)给你的Activity提供所需的资源文件,如 AndroidManifest.xml,XML
2016-04-01 16:29:47
3128
原创 Android中使用UncaughtExceptionHandler来处理未捕获的异常
使用UncaughtExceptionHandler来处理未捕获的异常 所有的App都会发生crash,本文讲解的是如何采集crash信息以供后续开发处理这类问题。基本思路当crash发生时,系统会调用UncaughtExceptionHandler的uncaughtExce
2016-03-28 16:33:11
1904
原创 Android的线程和线程池
在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程。Android中的主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。线程的创建和销毁的开销较大,所以如果一个进程要频繁地创建和销毁线程的话,都会采用线程池的方式。Android
2016-03-25 16:04:06
1408
原创 Android中AsyncTask基本用法与源码分析(API 23)
Android的UI是线程不安全的,想在子线程中更新UI就必须使用Android的异步操作机制,直接在主线程中更新UI会导致程序崩溃。 Android的异步操作主要有两种,AsyncTask和Handler。AsyncTask是一个轻量的异步类,简单、
2016-03-23 22:01:59
2265
原创 从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记
系统对四大组件的过程进行了很大程度的封装,日常开发中并不需要了解底层的工作原理,那么研究这些原理的意义在哪里呢?如果你想在技术上更进一步,那么了解一些系统的工作原理是十分必要的,也是开发人员日后成长为高级工程师所必备的技术能力。Android作为一个优秀的基于Linux操作系统,其内部一定
2016-03-15 10:26:33
2723
1
原创 利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记
Window表示一个窗口的概念,在某些特殊的时候,比如你需要在桌面或者锁屏上显示一些类似悬浮窗的东西时候就需要用到Window。Window是一个抽象类,Window的实现类是PhoneWindow。Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。Android中所有的视图都是通过Window来呈现的,不
2016-03-10 21:02:34
10785
2
原创 Android中的属性动画(Property Animation)——Android开发艺术探索笔记
最早出现在Android 3.0 中,和之前的Animation框架相比,Animator更加的灵活并且具有更多的功能,官方推荐使用Animator代替Animation。在3.0之前可以使用nineoldandroids来实现相同的效果。
2016-03-08 21:48:34
2077
原创 ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记
ViewRoot,DecorView,MeasureSpec和View的工作原理。View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View的宽和高,layout用来确定View在父容器中的放置位置
2016-03-01 18:17:13
3576
原创 Android中View的滑动冲突——Android开发艺术探索笔记
相信开发Android的人都会有这种体会:从网上下载的demo运行的好好的,但是只要出现了滑动冲突,Demo就无法正常工作了。但是不用担心,解决滑动冲突有固定的模式,常见的有内部拦截和外部拦截两种,只要按照这个模式来就可以顺利解决。本文会涉及到View事件分发
2016-02-29 16:50:07
3183
5
原创 Android中View的事件分发机制——Android开发艺术探索笔记
点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发的过程。
2016-02-25 15:32:10
3906
原创 Android中View的弹性滑动——Android开发艺术探索笔记
原文链接 http://sparkyuan.me/ 转载请注明出处介绍弹性滑动也就是渐进式滑动,实现弹性滑动的方法有很多,但是他们都有一个共同的思想:将一次大的滑动分成若干次小的滑动并在一段时间内完成。本文主要介绍三种弹性滑动方式,Scroller、动画和Handler。本文中的“滑动”是指View内容的滑动而非View本身位置的改变。示例点击屏幕任意地方,手指与屏幕接触时,触发ACTION_DOW
2016-02-24 17:05:35
4184
原创 Android中常见IPC方法总结——Android开发艺术探索笔记
IPC (Interprocess communication)跨进程通信,是指在两个进程之间交换数据的过程。多进程通信一般分为两种情况。第一种,一个应用因为自身的需要采用多进程实现,比如某些模块由于特殊原因需要运行在单独的进程中。第二种情况,当前应用需要获得其它应用的数据,由于是两个应用,所以必须采用跨进程的方式。下面就对常用的IPC方法做一个总结。
2016-02-12 18:14:12
2108
1
原创 Android中AIDL详解
原文链接http://sparkyuan.me/2016/03/11/AIDL/ 转载请注明出处介绍Android Interface Definition Language (AIDL), Android接口定义语言。系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信Interprocess communication (IPC)。AIDL就是解决这个问题的。 阅
2016-02-10 12:12:22
4047
原创 关于Android Studio里的Gradle,你所需要知道的都在这里了
前言你是不是有这种感觉,每当你使用Android Studio的时候,总会被她的优雅和便捷深深的吸引,但是一旦打开build.gradle文件就有一种想死的冲动,这尼玛都是什么啊,老子看不懂啦(ノಠ益ಠ)ノ彡┻━┻ ,不要着急,这篇文章就是来解救你的,看完这篇文章,你的种种疑问都会迎刃而解,从此与Android Studio过上快了幸福的生活。(大雾→_→)Gradle介绍Gradle是一个先进的b
2016-02-06 23:45:24
16487
2
原创 Android中IntentFilter匹配规则详解——Android开发艺术探索笔记
启动Activity的方式分为两种,显示和隐式调用。显示调用很简单,直接指明要启动的Activity就可以了,这里主要介绍一下隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。只有一个Intent同时匹配action,category和data才算匹配成功。
2016-02-06 14:51:30
4498
原创 Activity在异常情况下的生命周期——Android开发艺术探索笔记
原文链接http://sparkyuan.me转载请注明出处Activity在异常情况下的生命周期关于Activity正常情况下的生命周期请参考这篇文章http://blog.youkuaiyun.com/l664675249/article/details/48895903,本文主要讲解Activity在异常情况下的生命周期。情况1:资源相关的系统配置发生改变资源相关的系统配置发生改变,举个栗子。当前Acti
2016-02-05 16:08:32
2589
原创 Android中MVP模式与MVC模式比较(含示例)
MVP介绍MVP模式(Model-View-Presenter)是MVC模式的一个衍生。主要目的是为了解耦,使项目易于维护。Model 依然是业务逻辑和实体模型View 经常由Activity实现,包含Presenter的引用。所要做的就是当有交互时,调用Presenter里的对应方法。Presenter 负责完成View于Model间的交互,从Model里取数据,返回给View处理好的数据。
2016-01-19 14:55:46
8977
原创 Android最新动画框架完全解析(一)—— Animator(Property Animation)
Animator最早出现在Android 3.0 中,和之前的Animation框架相比,Animator更加的灵活并且具有更多的功能,官方推荐使用Animator代替Animation。 使用Animator前需要先了解几个属性:Duration:动画播放时间Time interpolation:属性值随着时间的改变情况,比如线性增长或者先快后慢Repeat count:动画重复播放次数
2015-12-07 13:05:45
2950
原创 Android最新动画框架完全解析(二)——Transitions Framework(Transitions 框架)
前面一篇文章讲解了Android动画Animator,但是不知道你有没有发现,前面讲解的所有的动画都是针对某一Object来进行的,虽然我们可以对整个Layout添加动画效果,但这是先把整个layout看成一个整体,再对这个整体添加动画效果。当我们想同时对多个Object添加动画效果时又该怎么做呢?先来看一下效果为什么要使用Transitions:ViewGroup级别的动画效果只需确定动画的开
2015-12-06 16:12:08
2556
原创 【面试常见算法整理】Binary Indexed Tree(Fenwick Tree,树状数组)详解
Binary Indexed Tree(Fenwick Tree,树状数组)详解问题:求一个数组中连续n项的和。首先想到的肯定是做一个循环,把这个连续的n项加起来,时间复杂度为O(n)。复杂度为n,看起来还不错,再说了求n个数的和,怎么也要加n次吧,所以说这应该就是最优解了,但是一提交结果是Time Limit Exceeded,顿时傻眼了,难道还有复杂度更低的方法?会不会有O(logn)的解法?
2015-12-03 10:50:06
9864
原创 开源项目9GAG源码解析与Material改造(三)
前面两篇文章分别讲解了9GAG中的UI布局和网络通信两个部分,本文重点讲解项目的最后一个部分——数据缓存,在APP的使用过程中好像感觉不到数据缓存的存在,但是如果没有数据缓存的话,项目的运行速度,耗电,流量等方面就会差很多。数据的缓存分为两个方面,一个是文本的缓存,一个是图片的缓存,下面分开进行讲解。文本9GAG的缓存策略是把请求的数据存入到本地数据库,每次展示的时候先查看本地的数据库有没有要展示的
2015-11-29 22:44:33
2115
原创 Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid)
在Android 5.0 中引入了Material Design的设计理念,并加入了RecyclerView和CardView两个控件。本文就讲解如何使用者两个控件来实现瀑布流效果(StaggeredGrid)。先上效果图RecyclerViewRecyclerView 是一个更加高级和灵活的ListView。它简化了显示和处理数据的过程,比如,为positioning item提供了layout
2015-11-16 17:33:50
3005
原创 Android网络通信必备神器Volley详解——实现一个自定义的Request(以Gson为例)
虽然Volley已经提供了对于String,图片,JSON,Request的解析,但是总会有些数据不属于以上三种的,这时候就需要我们来自己实现的一个Request来解析我们需要的数据。实现一个自定义的Request很简单:1. 继承Request,T代表你要解析的类型,比如服务器返回的response是一个String,那么就要继承Request2. 实现parseNetworkRes
2015-11-15 10:24:00
2024
原创 Android网络通信必备神器Volley详解——发送一个标准的Request
Volley主要支持一下几种Request1. StringRequest:确定一个URL,获得返回的原始字符串。2. ImageRequest:确定一个URL,获得一个图片。3. JsonObjectRequest和JsonArrayRequest: 确定一个URL,获得JSON对象或者数字。请求一个图片使用ImageRequestImageView mI
2015-11-12 14:48:31
1093
原创 Android网络通信必备神器Volley详解——自定义RequestQueue
上一篇文章讲解了如何使用Volley.newRequestQueue来新建一个默认的RequestQueue,本篇文章将要讲解的是新建一个RequestQueue的具体过程,从而可以新建一个自定义的RequestQueue。设置网络和缓存RequestQueue需要网络和缓存两部分才能工作。BasicNetwork提供基于HTTP的网络传输,DiskBaseCache提供具有内存索引的on
2015-11-12 10:47:05
2099
原创 Android网络通信必备神器Volley详解——初识Volley
简介Volley是Google开发和维护的一个网络通信开源库,具有方便、并发、快速的特点。但是Volley并不适合大文件下载或者流操作,因为在解析数据的时候Volley是把所有的response都放在内存里的。对于大文件下载可以用DownloadManager。下载Volley使用git下载git clone https://android.googlesource.com
2015-11-05 17:27:47
1404
原创 Android异步消息机制Handler详解,源码剖析(API 23)
Android的UI是线程不安全的,也就是说在子线程中操作主线程(UI线程)程序就会崩溃。想在子线程中更新UI就需要用到异步操作机制。Android的异步操作主要有两种,AsyncTask和Handler。AsyncTask的详细讲解和源码分析在我的另一篇博客中进行了详细的讲解,本篇就来讲解一下Handler的用法与源码分析。基本用法在Activity中有一个Button和一个Edit
2015-11-02 12:56:13
1721
原创 Android中使用Serializable和Parcelable实现序列化详解(含实例)
Android中实现序列化有两种方式,一种是使用Serializable另一种就是Parcelable了。Serializable本身就是JavaSE支持的,Parcelable是Android特有的,效率比Serializable高,据统计一般情况下能快10倍左右!但是Parcelable不能用在需要数据永久储存的情况,比如存到本地文件中,Parcelable不能保证在外界有变化的时候数据的
2015-10-25 14:12:24
8365
原创 Android布局优化经验总结
布局优化的目的是为了制作出高效、可复用的UI。 本文主要是对博主在平时开发的过程中关于布局经验的一个总结,觉得还有些用处,记录下来分享给大家。HierarchyViewerHierarchyViewer用来查看布局的层次,可以在sdk/tools下面找到,也可以通过Android Device Moniter打开。在部分手机上因为系统版本没有开放查看布局的权限,所以Hierarch
2015-10-22 14:50:24
1028
1
原创 Android中View的绘制流程详解
View的绘制流程从根节点(DecorView)开始,自上而下,每个View的绘制流程分为三个部分,Measure,Layout,Draw。
2015-10-18 00:59:30
933
原创 关于API 23 中Fragment的public void onAttach(Context context) 没有被调用的问题
在最新的SDK 23中,Fragment的onAttach(Activity activity)方法不赞成使用了(deprecated ),但是新的方法onAttach(Context context)会出现不被调用的情况。经测试后发现,如果你的设备API 小于23,就不会调用新的onAttach()方法。估计应该是Google的bug。解决方法:使用support.v4.ap
2015-10-17 19:45:44
4377
原创 Android中Fragment与Fragment,Fragment与Activity之间的通信
上一篇文章讲解了Fragment的一些基本用法,主要包括Fragment的动态和静态添加的问题。但是在实际的项目开发中,只知道这些还不够,还需要掌握Fragment与Fragment,Fragment与Activity之间的数据通信问题。Fragment与Fragment之间的通信一个Activity中经常会包含多个Fragment,多个Fragment之间的数据通信就变成了一个问题,下面
2015-10-15 15:35:21
1359
转载 Android 布局LinearLayout——属性baselineAligned的作用及baseline
相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的: 那到底这个属性是做什么用的呢? baselineAligned:基准线对齐。 首先要解释什么是基准线,这个在中文中不常见,但在以字母为书写语言的其他国家非常常见。
2015-10-14 23:14:04
1651
Android MVP模式示例
2016-01-19
Transitions Framework参考示例
2015-12-09
Service与Activity通信示例
2015-10-21
操作系统笔记(汤子瀛 思维导图)
2015-10-09
软件工程:面向对象和传统的方法(原书第8版)读书笔记(思维导图)
2015-09-30
Effective Java 2nd 读书笔记(思维导图)PDF版
2015-09-29
Effective Java 2nd 读书笔记(思维导图)
2015-09-29
计算机网络读书笔记(谢希仁 第六版 思维导图)
2015-09-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人