Android
文章平均质量分 88
流云易采
硕士
展开
-
Picasso源码解析
一、Picasso使用:gradle:compile 'com.squareup.picasso:picasso:2.5.2'使用:Picasso.with(this).load("http://...../photo3.jpg").into(myImg);自定义的使用方法:Picasso picasso = new Picasso.Builder(this) .memoryCach原创 2016-05-15 17:03:14 · 8183 阅读 · 2 评论 -
Android.mk文件解析
一、一个简单的Android.mk文件如下:LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := native-interfaceLOCAL_SRC_FILES := video.c \ adpcm.c \ audio.c \ sip.c \原创 2015-06-10 15:43:11 · 1594 阅读 · 0 评论 -
Volley简单学习使用二——Request
一、首先从每个POST或者GET请求的构造主体看起:XXXRequest(一)StringRequest源码如下:public class StringRequest extends Request { private final Listener mListener; /** * 可以看到最终构造请求交由Request类去实现,HTTP的请求和响应均是由原创 2015-06-17 16:30:53 · 1202 阅读 · 0 评论 -
Volley简单学习使用四——源码分析二
一、Volley工作流程图:继续从CacheDispatcher和NetworkDispatcher开始看起。二、CacheDispatcher: 一个线程,用于调度处理走缓存的请求。启动后会不断从缓存请求队列中取请求处理,队列为空则等待,请求处理结束则将结果传递给ResponseDelivery 去执行后续处理。当结果未缓存过、缓存失效或缓存原创 2015-06-23 10:12:46 · 987 阅读 · 0 评论 -
View机制深入学习(二)——View树的遍历
一、遍历View树的入口是ViewRootImpl的scheduleTraversal函数/** \frameworks\base\core\java\android\view\ViewRootImpl.java **/void scheduleTraversals() { if (!mTraversalScheduled) { // 判断当前是否已经在做遍历原创 2015-09-16 09:59:12 · 2952 阅读 · 0 评论 -
AsyncTask源码解析
AsyncTask的使用与解析原创 2015-10-29 14:41:27 · 727 阅读 · 0 评论 -
Android EventBus源码解析
一、EventBus的简单使用流程《Android EventBus的简单使用》中介绍了EventBus的简单使用,从 EventBus.getDefault().register(this);开始,注意在类中实现相应的onEvent方法: public void onEventMainThread(ActivityToServiceEvent even原创 2015-12-24 19:54:24 · 858 阅读 · 0 评论 -
Android之MotionEvent学习
getAction()方法返回的是int类型,用到的只有低16位(0x0000),其中:低八位是动作的类型,高8位是触摸点索引值的表示1、如果mAction的值是0x0000,则表示是第一个触控点的ACTION_DOWN操作。 如果mAction的值是0x0100,则表示是第二个触控点的ACTION_DOWN操作。 第三个的ACTION_DOWN呢?相信你可原创 2015-05-15 09:05:21 · 2426 阅读 · 0 评论 -
View机制深入学习(三) View中的消息传递及InputManagerService
以TouchEvent为主,看一下View和ViewGroup内部是如何处理Input Events的;一、View中TouchEvent的投递过程: 现在版本的Android中、事件处理者已经不由InputEventReceiver来承担,而是通过多种形式的InputStage来进行分别处理。如:final class SyntheticInputStage e原创 2015-09-19 19:30:14 · 8752 阅读 · 0 评论 -
Volley简单学习使用一
一、简介: Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。除了简单易用之外,Volley在性能方面也进行了大幅度的调整,它的设计目标就是非常适合去进行数据量不大,但通信频繁原创 2015-06-17 09:14:00 · 957 阅读 · 0 评论 -
Volley简单学习使用五—— 源码分析三
一、Volley工作流程图:二、Network 在NetworkDispatcher中需要处理的网络请求,由下面进行处理: NetworkResponse networkResponse = mNetwork.performRequest(request);看一下mNetwork的定义:(定义在NetworkDispatcher中) /** T原创 2015-06-25 08:46:58 · 1100 阅读 · 0 评论 -
Android学习总结2
一、屏幕出现卡顿的原因:表面原因:1、在UI主线程中执行比如像网络下载等耗时的操作,致使CPU没有能力在16ms内完成对下一帧显示数据的处理2、需要显示的界面太过复杂,比如布局的层次较深,界面控件过多等,给CPU与GPU的渲染造成压力3、手机硬件GPU、CPU处理能力有限,FPS低于16ms,造成卡顿;Android 4.1后Triple Buffering三缓冲机制一定程度上缓解原创 2015-11-09 08:32:59 · 855 阅读 · 0 评论 -
Activity启动过程(一)AMS
在前面《Android启动过程》中提到了System进程启动ActivityManagerService服务,AMS是由Android提供的用于管理Activity(不仅仅指Activity,还包括其他三个组件)运行状态的系统进程,则是平时编写APK应用程序时使用得最频繁的一个系统服务。 AMS是通过ActivityStack(和其它数据结构)来记录、管理系统中的Activity(和其它原创 2015-08-25 10:22:26 · 2630 阅读 · 0 评论 -
Handler使用总结
总结一些常见的Handler使用方法及变种原创 2015-07-07 20:53:23 · 1002 阅读 · 0 评论 -
Android之meta-data使用
元数据meta-data应用在manifest.xml文件中,主要用以为父组件提供配置数据。一个组件中可以包含有多个meta-data; 其可被包含于、、、中。其基本使用语法为:<meta-data android:name="data_name" android:value="@string/meta_data" android:resource原创 2015-08-06 16:49:08 · 1203 阅读 · 0 评论 -
Android常用adb命令
一、ADB(Android Debug Bridge);其工具包文件在SDK中,文件路径位于SDK安装路径下platform-tools文件夹中: ADB源码在Android工程目录下/system/core/adb中。 使用:直接将运行目录切换到adb.exe所在路径,真机通过USB连接,或者启动模拟器,即可通过输入命令进行调试: adb d原创 2015-08-21 15:53:35 · 1718 阅读 · 0 评论 -
Android编程规范
命名规则1). 类名,接口名:以大写开头,如果一个类的类名由多个单词组成,所有单词的首字母必须大写,单词尽量写全称,不要简写,除非约定俗成的名字,例如:URL,RTMP,RTSP 这些广泛使用的专有名词,可以全部大写,也可以首字母大写。例如 HttpRequest,CourseActivity2). 局部变量,类的成员变量,类的成员函数,函数参数:以小写字母转载 2015-08-31 08:25:23 · 757 阅读 · 0 评论 -
Android ListView —— Adapter, BaseAdapter, RecycleBin
Android ListView —— Adapter, BaseAdapter, RecycleBin一、前述 通常,我们在使用ListView / GridView时,都需要使用Adapter,Adapter有多种,最常用的就是BaseAdapter 和 CursorAdapter了,前者是属于通用的,而后者通常会与数据库一起来使用。转载 2015-09-05 10:45:44 · 831 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习六——硬盘缓存策略
硬盘缓存策略:LimitedAgeDiscCache(设定文件存活的最长时间,当超过这个值,就删除该文件)UnlimitedDiscCache(这个缓存类没有任何的限制)继承关系:public class LimitedAgeDiscCache extends BaseDiscCachepublic abstractclass BaseDiscCach原创 2015-05-04 16:47:49 · 1341 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习无——WeakMemoryCache 和 FuzzyKeyMemoryCache
WeakMemoryCache 源码:BaseMemoryCache参见:http://blog.csdn.net/woliuyunyicai/article/details/45330867/** * Memory cache with {@linkplain WeakReference weak references} to {@linkplain android.graphic原创 2015-05-03 10:11:50 · 1124 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习四——LimitedMemoryCache的一些子集
LRULimitedMemoryCache源码:/** * (cache size limited)Size of all stored bitmaps will not to exceed size limit. * (删除策略LRU)When cache reaches limit size then the least recently used bitmap is delete原创 2015-05-03 09:51:21 · 1024 阅读 · 0 评论 -
GSON源码解析
把之前做的笔记又重新整理了一下,发现简单只看了GSON的解析流程;1、GSON的两种解析使用方式:1)直接利用GSON中默认的反射机制来解析:Gson gson1 = new Gson();gson1.fromJson(str, Data.class);2)利用自定义的TypeAdapter来解析:// Builder模式GsonBuilder gsonBuilder原创 2016-03-13 20:58:10 · 1529 阅读 · 0 评论 -
Android启动过程——init,Zygote,SystemServer
一、Android设备启动经历的三个阶段:Boot Loader;Linux Kernel;Android系统服务;每个阶段都有自己的启动画面。1、Android中第一个被启动的进程——init,init进程的PID为0,其他的服务都由其进行创建。它是通过解析init.rc脚本来构建出系统的初始运行状态的。init进程是在系统启动启动过程中启动的。2、init.rc语法规则:1)Act原创 2015-08-18 11:12:29 · 3979 阅读 · 0 评论 -
ArrayMapy、SparseArray源码学习
ArrayMap和SparseArray是Android中提供用来替代HashMap实现内存优化的集合类,来具体看下其源码实现: 一、ArrayMap简单分析 1)存储原理: HashMap是使用一个table数组来存储;发生冲突时采用链地址法以链表或者红黑树的形式进行存储; 而ArrayMap使用的是两个数组,mHash数组用来存储hash值(顺序存储);mArray在对应位置存储(比如m原创 2016-04-21 22:14:13 · 916 阅读 · 0 评论 -
Volley源码分析
一、Volley框架图 根据图简单猜测Volley工作的流程,见右下角的注释,蓝色表示主线程(main thread),绿色表示缓存线程(cache thread),黄色表示网络线程(network threads);再寻找图中的关键字:queue(RequestQueue),cache queue,CacheDispatcher,NetworkDispatcher;原创 2015-06-19 11:04:47 · 3454 阅读 · 0 评论 -
Handler机制深入解析
知乎上看到这样一个问题Android中为什么主线程不会因为Looper.loop()里的死循环卡死?,于是试着对Handler源码重新看了一下,其实Android的消息机制是Pipe+epoll,有消息时则依次执行,没消息时调用epoll.wait等待唤醒;由于Android中生命周期、UI绘制都是动过Handler实现的,因此自然不会发生阻塞卡死。1、创建Looper之间Java原创 2016-03-02 15:50:07 · 1335 阅读 · 0 评论 -
View机制深入学习(四)View的事件分发机制
当发生点击事件后,事件会最先传递给当前的Activity,Activity调用dispatchTouchEvent来进行事件的dispatch;1、Activity#dispatchTouchEvent:/** \frameworks\base\core\java\android\app\Activity.java **/public boolean dispatchTo原创 2015-11-16 15:10:26 · 1219 阅读 · 0 评论 -
View机制深入学习(五) 事件处理机制一
以TouchEvent为主,看一下View和ViewGroup内部是如何处理Input Events的; 首先来看事件的产生来源:一、获取事件:事件的来源可以分为“软件”,“硬件”两种; 主要的事件包含有: 按键事件(KeyEvent) :即物理按键按下产生的事件,相关的常用物理按键一般有HOME,BACK等 触摸事件(TouchEvent): 鼠标事件(MouseEvent)、轨原创 2016-05-10 17:26:37 · 2353 阅读 · 0 评论 -
Fragment源码解析
一、Fragment的简单使用:FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();transaction.add(R.id.radio1, tabFourFragment, tabFourFragment.getTag());transaction.remove(tabFourFrag原创 2016-05-18 19:11:34 · 4935 阅读 · 1 评论 -
Retrofit源码解析
square公司开源了一系列的优秀库,比如Retrofit,OkHttp,Picasso等, 前面简单分析了Picasso的源码,这里来分析下Retrofit的使用:一、gradle添加依赖compile 'com.squareup.okhttp:okhttp:2.4.0'compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'compi原创 2016-05-23 08:54:51 · 12146 阅读 · 6 评论 -
设计模式汇总:结构型模型(下)
总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模原创 2016-05-25 16:29:41 · 7701 阅读 · 0 评论 -
Handler,Looper,Message,MessageQueue之间关系浅析
一、先看一下使用流程1.在子线程中使用Handler实例 /***********子线程使用Handler实例*********/ private class LooperThread extends Thread { public Handler handler; @Override public void run()原创 2015-06-16 08:42:41 · 1448 阅读 · 0 评论 -
View机制深入学习(一)
函数调度:(基于Android5.1)1、ActivityThread类中有一个handleLaunchActivity的函数,该函数是创建Activity的地方。/** \frameworks\base\core\java\android\app\ActivityThread.java**/private void handleLaunchActivity(Ac原创 2015-09-13 20:11:57 · 1413 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习使用1
一、工作流程:1、当请求显示图片,调用ImageLoader.displayImage(),首先会 1)计算显示图片的尺寸大小 2)判断该图片是否已存在缓存中,若No,跳到步骤3,若Yes,跳到步骤9 3)判断图片是否已存在本地,若No,跳到步骤4;若Yes,跳到步骤6 4)判断图片允许存储在本地,若No,跳转到步骤6;若Yes,跳到步骤5原创 2015-04-20 16:49:20 · 1052 阅读 · 0 评论 -
Android中的Handler消息机制
转自:http://blog.csdn.net/liuhe688/article/details/6407225在分析Android消息机制之前,我们先来看一段代码:public class MainActivity extends Activity implements View.OnClickListener { private TextView stateT原创 2015-04-23 08:51:26 · 960 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习二——LruMemoryCache源码阅读
Universal-Image-Loader的内存缓存策略1. 只使用的是强引用缓存 LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用)2.使用强引用和弱引用相结合的缓存有UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)LRULimite原创 2015-04-28 08:37:25 · 2280 阅读 · 0 评论 -
Android开源框架Universal-Image-Loader学习三——UsingFreqLimitedMemoryCache源码阅读
Universal-Image-Loader的内存缓存策略1. 只使用的是强引用缓存 LruMemoryCache(这个类就是这个开源框架默认的内存缓存类,缓存的是bitmap的强引用)2.使用强引用和弱引用相结合的缓存有UsingFreqLimitedMemoryCache(如果缓存的图片总量超过限定值,先删除使用频率最小的bitmap)LRULimitedM原创 2015-04-30 15:16:25 · 1153 阅读 · 0 评论 -
Android获取手机电话簿信息
1、Activity:/** * Created by admin on 2015/9/22. */public class PhoneBookActivity extends Activity { private static final String TAG = "PhoneBookActivity"; private IndexableListView phon原创 2015-09-23 11:03:18 · 1132 阅读 · 0 评论 -
Android数据存储五种方式总结
本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据下面详细讲解这五种方式的特点第一种: 使用SharedPrefe转载 2015-10-15 09:20:22 · 499 阅读 · 0 评论 -
Android面试题之——内存泄露
一、内存泄露的定义: 内存泄露是指不再使用的内存仍然占用着内存空间,因为程序中仍然保存着对它的引用,而使得GC无法将它回收或得到及时释放,从而造成的内存空间浪费的问题,称为内存泄露。二、内存泄露的根本原因: 长生命周期的对象持有短生命周期对应的引用,因为短生命周期对象可能不再使用,而因为长生命周期对象持有着对其的引用,因此GC无法将其进行回收。三、内存原创 2015-11-04 20:15:50 · 1773 阅读 · 0 评论