JVM运行时数据区域分析 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同数据区域。这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。 原文链接:http://sparkyuan.me/2016/04/22/JVM运行时数据区域/ ,转载请注明出去程序计数器(PC)程序计数器(Program Counter Reg
Android安全机制 Android系统是基于Linux内核开发的,因此,Android系统不仅保留和继承了Linux操作系统的安全机制,而且其系统架构的各个层次都有独特的安全特性。 Linux内核安全机制Android的Linux内核包含了强制访问控制机制和自主访问控制机制。强制访问控制机
从Android源码到apk——apk打包过程 Android程序是怎么从源码变成可以安装使用的apk的 流程官方版详细版上面就是一个关于构建过程的一个典型的流程图。aapt(Android Asset Packaging Tool)给你的Activity提供所需的资源文件,如 AndroidManifest.xml,XML
Android中使用UncaughtExceptionHandler来处理未捕获的异常 使用UncaughtExceptionHandler来处理未捕获的异常 所有的App都会发生crash,本文讲解的是如何采集crash信息以供后续开发处理这类问题。基本思路当crash发生时,系统会调用UncaughtExceptionHandler的uncaughtExce
Android的线程和线程池 在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程。Android中的主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时操作。线程的创建和销毁的开销较大,所以如果一个进程要频繁地创建和销毁线程的话,都会采用线程池的方式。Android
Android中AsyncTask基本用法与源码分析(API 23) Android的UI是线程不安全的,想在子线程中更新UI就必须使用Android的异步操作机制,直接在主线程中更新UI会导致程序崩溃。 Android的异步操作主要有两种,AsyncTask和Handler。AsyncTask是一个轻量的异步类,简单、
从源码的角度理解四大组件的工作过程——Android开发艺术探索笔记 系统对四大组件的过程进行了很大程度的封装,日常开发中并不需要了解底层的工作原理,那么研究这些原理的意义在哪里呢?如果你想在技术上更进一步,那么了解一些系统的工作原理是十分必要的,也是开发人员日后成长为高级工程师所必备的技术能力。Android作为一个优秀的基于Linux操作系统,其内部一定
【通知】本博客迁移到 http://sparkyuan.me/ 通知折腾了一下午,终于通过 GitHub Pages + Hexo 搭好了属于自己的网站。虽然花了29块买了个域名,又选了好2个小时的主题,不过最终的结果还是很满意的。本博客停止更新,新的文章请访问:http://sparkyuan.me/ ヽ(✿゚▽゚)ノ
利用Window和WindowManager实现悬浮窗效果——Android开发艺术探索笔记 Window表示一个窗口的概念,在某些特殊的时候,比如你需要在桌面或者锁屏上显示一些类似悬浮窗的东西时候就需要用到Window。Window是一个抽象类,Window的实现类是PhoneWindow。Window的具体实现位于WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC过程。Android中所有的视图都是通过Window来呈现的,不
Android中的属性动画(Property Animation)——Android开发艺术探索笔记 最早出现在Android 3.0 中,和之前的Animation框架相比,Animator更加的灵活并且具有更多的功能,官方推荐使用Animator代替Animation。在3.0之前可以使用nineoldandroids来实现相同的效果。
一个特别适合新手练习的Android小项目——每日一妹纸 介绍当前版本V 1.2刚开始学习Android的时候,主要就是学习了一些Activity的生命周期,各种View和Layout的使用,SQLite等零散的知识点,这些东西市面上任何一本Android的入门书籍都会覆盖,但是学习完这些之后就有些迷茫了,不知道下一步该学一些什么?如果你也正好处于这个状态不妨看看这个开源项目。自己走过一些弯路,所以写了一个这样的App,希望可以对学习Android的新手有
ViewRoot,DecorView,MeasureSpec和View的工作原理——Android开发艺术探索笔记 ViewRoot,DecorView,MeasureSpec和View的工作原理。View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure、layout和draw三个过程才能最终将一个View绘制出来,其中measure用来测量View的宽和高,layout用来确定View在父容器中的放置位置
Android中View的滑动冲突——Android开发艺术探索笔记 相信开发Android的人都会有这种体会:从网上下载的demo运行的好好的,但是只要出现了滑动冲突,Demo就无法正常工作了。但是不用担心,解决滑动冲突有固定的模式,常见的有内部拦截和外部拦截两种,只要按照这个模式来就可以顺利解决。本文会涉及到View事件分发
Android中View的事件分发机制——Android开发艺术探索笔记 点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发的过程。
Android中View的弹性滑动——Android开发艺术探索笔记 原文链接 http://sparkyuan.me/ 转载请注明出处介绍弹性滑动也就是渐进式滑动,实现弹性滑动的方法有很多,但是他们都有一个共同的思想:将一次大的滑动分成若干次小的滑动并在一段时间内完成。本文主要介绍三种弹性滑动方式,Scroller、动画和Handler。本文中的“滑动”是指View内容的滑动而非View本身位置的改变。示例点击屏幕任意地方,手指与屏幕接触时,触发ACTION_DOW
Android中常见IPC方法总结——Android开发艺术探索笔记 IPC (Interprocess communication)跨进程通信,是指在两个进程之间交换数据的过程。多进程通信一般分为两种情况。第一种,一个应用因为自身的需要采用多进程实现,比如某些模块由于特殊原因需要运行在单独的进程中。第二种情况,当前应用需要获得其它应用的数据,由于是两个应用,所以必须采用跨进程的方式。下面就对常用的IPC方法做一个总结。
Android中AIDL详解 原文链接http://sparkyuan.me/2016/03/11/AIDL/ 转载请注明出处介绍Android Interface Definition Language (AIDL), Android接口定义语言。系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信Interprocess communication (IPC)。AIDL就是解决这个问题的。 阅
关于Android Studio里的Gradle,你所需要知道的都在这里了 前言你是不是有这种感觉,每当你使用Android Studio的时候,总会被她的优雅和便捷深深的吸引,但是一旦打开build.gradle文件就有一种想死的冲动,这尼玛都是什么啊,老子看不懂啦(ノಠ益ಠ)ノ彡┻━┻ ,不要着急,这篇文章就是来解救你的,看完这篇文章,你的种种疑问都会迎刃而解,从此与Android Studio过上快了幸福的生活。(大雾→_→)Gradle介绍Gradle是一个先进的b
Android中IntentFilter匹配规则详解——Android开发艺术探索笔记 启动Activity的方式分为两种,显示和隐式调用。显示调用很简单,直接指明要启动的Activity就可以了,这里主要介绍一下隐式调用。隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。只有一个Intent同时匹配action,category和data才算匹配成功。
Activity在异常情况下的生命周期——Android开发艺术探索笔记 原文链接http://sparkyuan.me转载请注明出处Activity在异常情况下的生命周期关于Activity正常情况下的生命周期请参考这篇文章http://blog.csdn.net/l664675249/article/details/48895903,本文主要讲解Activity在异常情况下的生命周期。情况1:资源相关的系统配置发生改变资源相关的系统配置发生改变,举个栗子。当前Acti
Android中MVP模式与MVC模式比较(含示例) MVP介绍MVP模式(Model-View-Presenter)是MVC模式的一个衍生。主要目的是为了解耦,使项目易于维护。Model 依然是业务逻辑和实体模型View 经常由Activity实现,包含Presenter的引用。所要做的就是当有交互时,调用Presenter里的对应方法。Presenter 负责完成View于Model间的交互,从Model里取数据,返回给View处理好的数据。
Android最新动画框架完全解析(一)—— Animator(Property Animation) Animator最早出现在Android 3.0 中,和之前的Animation框架相比,Animator更加的灵活并且具有更多的功能,官方推荐使用Animator代替Animation。 使用Animator前需要先了解几个属性:Duration:动画播放时间Time interpolation:属性值随着时间的改变情况,比如线性增长或者先快后慢Repeat count:动画重复播放次数
Android最新动画框架完全解析(二)——Transitions Framework(Transitions 框架) 前面一篇文章讲解了Android动画Animator,但是不知道你有没有发现,前面讲解的所有的动画都是针对某一Object来进行的,虽然我们可以对整个Layout添加动画效果,但这是先把整个layout看成一个整体,再对这个整体添加动画效果。当我们想同时对多个Object添加动画效果时又该怎么做呢?先来看一下效果为什么要使用Transitions:ViewGroup级别的动画效果只需确定动画的开
【面试常见算法整理】Binary Indexed Tree(Fenwick Tree,树状数组)详解 Binary Indexed Tree(Fenwick Tree,树状数组)详解问题:求一个数组中连续n项的和。首先想到的肯定是做一个循环,把这个连续的n项加起来,时间复杂度为O(n)。复杂度为n,看起来还不错,再说了求n个数的和,怎么也要加n次吧,所以说这应该就是最优解了,但是一提交结果是Time Limit Exceeded,顿时傻眼了,难道还有复杂度更低的方法?会不会有O(logn)的解法?
开源项目9GAG源码解析与Material改造(三) 前面两篇文章分别讲解了9GAG中的UI布局和网络通信两个部分,本文重点讲解项目的最后一个部分——数据缓存,在APP的使用过程中好像感觉不到数据缓存的存在,但是如果没有数据缓存的话,项目的运行速度,耗电,流量等方面就会差很多。数据的缓存分为两个方面,一个是文本的缓存,一个是图片的缓存,下面分开进行讲解。文本9GAG的缓存策略是把请求的数据存入到本地数据库,每次展示的时候先查看本地的数据库有没有要展示的
Android中使用RecyclerView和CardView实现瀑布流效果(StaggeredGrid) 在Android 5.0 中引入了Material Design的设计理念,并加入了RecyclerView和CardView两个控件。本文就讲解如何使用者两个控件来实现瀑布流效果(StaggeredGrid)。先上效果图RecyclerViewRecyclerView 是一个更加高级和灵活的ListView。它简化了显示和处理数据的过程,比如,为positioning item提供了layout
Android网络通信必备神器Volley详解——实现一个自定义的Request(以Gson为例) 虽然Volley已经提供了对于String,图片,JSON,Request的解析,但是总会有些数据不属于以上三种的,这时候就需要我们来自己实现的一个Request来解析我们需要的数据。实现一个自定义的Request很简单:1. 继承Request,T代表你要解析的类型,比如服务器返回的response是一个String,那么就要继承Request2. 实现parseNetworkRes
Android网络通信必备神器Volley详解——发送一个标准的Request Volley主要支持一下几种Request1. StringRequest:确定一个URL,获得返回的原始字符串。2. ImageRequest:确定一个URL,获得一个图片。3. JsonObjectRequest和JsonArrayRequest: 确定一个URL,获得JSON对象或者数字。请求一个图片使用ImageRequestImageView mI
Android网络通信必备神器Volley详解——自定义RequestQueue 上一篇文章讲解了如何使用Volley.newRequestQueue来新建一个默认的RequestQueue,本篇文章将要讲解的是新建一个RequestQueue的具体过程,从而可以新建一个自定义的RequestQueue。设置网络和缓存RequestQueue需要网络和缓存两部分才能工作。BasicNetwork提供基于HTTP的网络传输,DiskBaseCache提供具有内存索引的on
Android网络通信必备神器Volley详解——初识Volley 简介Volley是Google开发和维护的一个网络通信开源库,具有方便、并发、快速的特点。但是Volley并不适合大文件下载或者流操作,因为在解析数据的时候Volley是把所有的response都放在内存里的。对于大文件下载可以用DownloadManager。下载Volley使用git下载git clone https://android.googlesource.com
Android异步消息机制Handler详解,源码剖析(API 23) Android的UI是线程不安全的,也就是说在子线程中操作主线程(UI线程)程序就会崩溃。想在子线程中更新UI就需要用到异步操作机制。Android的异步操作主要有两种,AsyncTask和Handler。AsyncTask的详细讲解和源码分析在我的另一篇博客中进行了详细的讲解,本篇就来讲解一下Handler的用法与源码分析。基本用法在Activity中有一个Button和一个Edit
Android中使用Serializable和Parcelable实现序列化详解(含实例) Android中实现序列化有两种方式,一种是使用Serializable另一种就是Parcelable了。Serializable本身就是JavaSE支持的,Parcelable是Android特有的,效率比Serializable高,据统计一般情况下能快10倍左右!但是Parcelable不能用在需要数据永久储存的情况,比如存到本地文件中,Parcelable不能保证在外界有变化的时候数据的
Android布局优化经验总结 布局优化的目的是为了制作出高效、可复用的UI。 本文主要是对博主在平时开发的过程中关于布局经验的一个总结,觉得还有些用处,记录下来分享给大家。HierarchyViewerHierarchyViewer用来查看布局的层次,可以在sdk/tools下面找到,也可以通过Android Device Moniter打开。在部分手机上因为系统版本没有开放查看布局的权限,所以Hierarch
关于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
Android中Fragment与Fragment,Fragment与Activity之间的通信 上一篇文章讲解了Fragment的一些基本用法,主要包括Fragment的动态和静态添加的问题。但是在实际的项目开发中,只知道这些还不够,还需要掌握Fragment与Fragment,Fragment与Activity之间的数据通信问题。Fragment与Fragment之间的通信一个Activity中经常会包含多个Fragment,多个Fragment之间的数据通信就变成了一个问题,下面
Android 布局LinearLayout——属性baselineAligned的作用及baseline 相信大家对LinearLayout已经相当熟悉,但你们是否了解它的属性baselineAligned呢? Android官方文档是这么描述的: 那到底这个属性是做什么用的呢? baselineAligned:基准线对齐。 首先要解释什么是基准线,这个在中文中不常见,但在以字母为书写语言的其他国家非常常见。
Android中的Fragment详解 ("碎片"这个翻译真是太烂了!) Android在3.0版本引中入了Fragment,作用与Activity类似,可以包含布局。Fragment一般是嵌套在Activity中使用,对一个Activity中的布局进行模块化管理。
SQLite开发实例 上一篇文章介绍了SQLite的一些基本用法,本篇文章是一个SQLite在项目中的实际例子。实际开发中,为了能够更好的管理和维护数据库,我们会封装一个继承自SQLiteOpenHelper类的数据库操作类,然后以这个类为基础,再封装我们的业务逻辑方法。目录结构DBHelper继承了SQLiteOpenHelper,作为维护和管理数据库的基类,DBManager
Android中的数据库——SQLite SQLite是遵守ACID的关系型数据库管理系统。废话不多说,直接上代码。 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //打开或创建test.db数据库 SQLiteDatabase db = openOrCre
Android 屏幕适配 Android设备的屏幕尺寸千差万别,屏幕适配是Android开发中很重要的一部分。本文介绍和总结了屏幕适配中常遇到的一些问题,使得屏幕适配不再是问题。几个缩写的意思pxpixel的缩写,屏幕上的像素点。都是整数,不可能出现0.5px的情况。ininch的缩写。1 inch = 2.54cm。平时所说的手机屏幕尺寸,指的是屏幕对角线的长度。dpiDots Per Inc
Android系统中标准Intent的使用 一 Android系统用于Activity的标准Intent1 根据联系人ID显示联系人信息[java] view plaincopyIntent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); //显示联系人信息 intent.setData(
BaseAdapter中getView()方法详解 上一篇文章中关于优化ListView(使用BaseAdapter)的例子中,getView()这个方法解释的不是很清楚。这次单独写一篇详细解释一下getView方法。官方API中关于getView的解释public abstract View getView (int position, View convertView, ViewGroup parent)
Android中ListView的基本使用与优化 ListView通常有两个职责。(1)将数据填充到布局。(2)处理用户的选择点击等操作。ListView的创建需要3个元素。(1)ListView中的每一列的View。(2)填入View的数据或者图片等。(3)连接数据与ListView的适配器。要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和Adapte
Android四大基本组件——Content Provider ContentProvider:使一个应用程序的指定数据集提供给其他应用程序使用。这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式。其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据.(相当于在应用外包了一层壳)。只有需要在多个应用程序间共享数据是才需要内容提供者。例如,通讯录数据被多个应用程序使用,且必须存储在一个内容提供者中。它
Android四大基本组件——Service完全解析 一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。一个比较好的例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐播放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统
Android Studio 配置优化 Android Studio固然好用,但是刚从Eclipse转移到Android Studio上难免有很多不便,现在集中整理一下AS与Eclipse的区别,使得AS更好用。1. 首先,快捷键Keymap到Eclipse。2. 代码自动补全功能快捷键换成熟悉的Alt + /3. 代码自动补全的相关设置。下图是根据个人喜好选择的,仅供参考。
Android四大基本组件——BroadcastReceive BroadcastReceiver:使你的应用只对感兴趣的外部事件(如当电话呼入时,或者数据网络可用时)进行接收并做出响应。BroadcastReceive没有用户界面。然而,它们可以启动一个activity或service来响应它们收到的信息,或者用NotificationManager 来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是
Android四大基本组件——Activity Activity: 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity的知识点主要分为两个部分,Activity生命周期,Activity之间的Intent数据通信。Activity声明周期BACK键:当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPa
Pro Git 笔记(思维导图) 自己读Pro Git时所整理的笔记。-----------------------------------------------------------------如果遇到任何问题欢迎留言讨论,我知道的一定会尽力解答O(∩_∩)O~
软件测试 读书笔记(思维导图) 自己整理的有关软件测试的一些知识点。Xmind原文件-----------------------------------------------------------------如果遇到任何问题欢迎留言讨论,我知道的一定会尽力解答O(∩_∩)O~-------------------------------------------------------
软件工程:面向对象和传统的方法(原书第8版)读书笔记(思维导图) 自己整理的软件工程知识点。Xmind原文件------------------------------------------------------------------------如果遇到任何问题欢迎留言讨论,我知道的一定会尽力解答O(∩_∩)O~
一句话解释什么是回调函数 在类B中调用了类A的函数,这个函数就叫做回调函数。回调函数常用来实现Notifier的作用。为了实现这种模式,通常把回掉函数放在interface里,并用类来实现它,这个类作为类A,在类B中注册类A,执行完某些操作后调用类B的方法。interface CallBack { void methodToCallBack();}class CallBackImp
Android Studio中集成OpenCV——只需4步 Android Studio中集成OpenCV——只需4步软件版本 Android Studio 1.3, Android OpenCV SDK 2.4.10,其他版本大同小异1. 在Android Studio中, File -> new -> Import Module。选择OpenCV文件夹中的sdk/java文件夹。