android开发与艺术探索
文章平均质量分 72
勇敢地追
这个作者很懒,什么都没留下…
展开
-
ImageLoader
这次做一个图片加载器,里面涉及到线程池,bitmap的高效加载,LruCache,DiskLruCache。接下来我先介绍这四个知识点一.线程池优点: (1)重用线程池中的线程,避免因为线程的创建和销毁带来性能上的开销 (2)有效控制线程池的最大并发数,避免大量线程之间因互相抢占系统资源而阻塞 (3)对线程进行简单管理,并提供定时执行和指定间隔循环执行等功能1.ThreadPoolExecut原创 2016-09-12 19:19:02 · 751 阅读 · 1 评论 -
android中内存缓存是如何实现的
那就有必要来看看LruCache源代码了 里面有一个重要的数据结构LinkedHashMap。具体讲解在这里(http://blog.csdn.net/lxj1137800599/article/details/54974988) 在此总结一下用法: 1.添加一个数据。先找到数组中对应的index,然后把数据放到链表的最后位置。由于是双向链表,那么就等于放在header.prv 2.获取一原创 2017-02-10 23:28:07 · 1976 阅读 · 0 评论 -
Handler消息机制
为什么不允许子线程访问UI?UI线程不是线程安全的,多线程并发访问会出问题。为什么不加锁呢?首先加锁机制会使UI访问逻辑变复杂,其次锁机制降低UI访问效率,因为锁机制会阻塞某些线程的执行1.Handler无参构造函数 public Handler() { this(null, false); } public Handler(Callback callback,原创 2016-12-17 15:50:40 · 422 阅读 · 0 评论 -
AsyncTask实现机制
public final AsyncTask<Params, Progress, Result> execute(Params... params) { return executeOnExecutor(sDefaultExecutor, params); } public final AsyncTask<Params, Progress, Result> execut原创 2016-12-17 10:57:32 · 2663 阅读 · 2 评论 -
四大组件的启动过程
1.Activity启动过程 http://blog.csdn.net/lxj1137800599/article/details/536442592.Service启动过程 http://blog.csdn.net/lxj1137800599/article/details/536963093.BroadcastReceiver启动过程 http://blog.csdn.net/lxj113原创 2016-12-17 09:34:44 · 525 阅读 · 0 评论 -
BroadcastReceiver启动过程
1.注册过程 @Override public Intent registerReceiver( BroadcastReceiver receiver, IntentFilter filter) { return mBase.registerReceiver(receiver, filter); }看到啥了?mBase.registerRecei原创 2016-12-17 09:24:01 · 1149 阅读 · 0 评论 -
Service启动过程
service启动过程分为两种。startService和bindService1.startService @Override public ComponentName startService(Intent service) { return mBase.startService(service); } public abstract Componen原创 2016-12-16 18:15:03 · 670 阅读 · 0 评论 -
Window和WindowManager
1.WindowManager介绍一种系统服务,主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等2.WindowManager功能WindowManager提供的功能很简单,就三个,这三个方法定义在ViewManager中。WindowManager继承ViewManagerpublic interface ViewManager{ public vo原创 2016-09-02 16:17:58 · 427 阅读 · 0 评论 -
Android IPC机制
1.多进程模式使用多进程只有一种方法——给四大组件指定android:process 在多进程模式中,不同进程会拥有独立的虚拟机,Application和内存空间2.IPC基础概念Serializable接口,Parcelable接口和Binder Serializable属于Java阵营,虽然简单但是开销大,序列化和反序列化都需要大量IO。Parcelable是Android中的序列化方式,效原创 2016-12-07 19:21:42 · 410 阅读 · 0 评论 -
使用Messenger
Messenger可以翻译为“信使”,顾名思义,通过它可以再不同进程间传递数据。Mesenger其实是一种轻量级的IPC,它的底层实现就是AIDL。从构造函数就可以看出来 public Messenger(Handler target) { mTarget = target.getIMessenger(); } public Messenger(IBinder t原创 2016-12-07 19:04:52 · 774 阅读 · 0 评论 -
Activity生命周期和启动模式
1.生命周期http://blog.csdn.net/lxj1137800599/article/details/50353728 这篇文章已经介绍了生命周期,概括下来就是下面这幅图 2.启动模式 (1)standard:标准模式。每次激活Activity时,都创建Activity实例,并放入任务栈,不管这个实例是否存在 (2)singleTop:栈顶复用模式。如果就是该Activit原创 2016-12-03 09:57:11 · 430 阅读 · 0 评论 -
Activity启动过程
Activity的启动通常从startActivity开始。 但是startActivity最终都会调用startActivityForResult public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) { if (mParent == null原创 2016-12-14 19:04:52 · 698 阅读 · 0 评论 -
RemoteView
使用方法我就不介绍了,网上一大堆1.PendingIntent概述PendingIntent表示在将来的某个时刻发生,Intent是立即发生。 PendingIntent的匹配规则:如果两个PendingIntent它们内部的Intent相同并且requestCode也相同,那么这两个PendingIntent就是相同的(如果两个Intent的ComponentName和intent-filte原创 2016-08-26 11:53:32 · 674 阅读 · 0 评论 -
View的工作原理
1.绘制流程View的绘制流程是从ViewRoot的PerformTraversals方法开始的。它经过measure,layout,draw三个过程将view绘制出来。mesure用来测量view的宽高,layout用来确定位置,draw绘制。流程图如下 performTraversals会依次调用performMeasure, performLayout, performDraw三个方法,这三原创 2016-08-25 11:31:13 · 505 阅读 · 0 评论 -
View的事件体系
1.View的位置参数 2.MotionEvent 手指触摸屏幕后的一系列事件,包括ACTION_DOWN,ACTION_MOVE,ACTION_UP3.TouchSlop 系统所能识别的被认为是滑动的最小距离,获取方式为:ViewConfiguration.get(getContext()).getScaledTouchSlop()4.VelocityTracker速度追踪 Velocit原创 2016-08-24 19:15:37 · 650 阅读 · 0 评论 -
AIDL(续)
http://blog.csdn.net/lxj1137800599/article/details/50998757 这篇文章讲的是在不同的工程文件中实现IPC。这次我决定用一个工程完成首先,我先介绍一下流程1服务端先创建Service来监听客户端的连接请求,然后创建AIDL文件,将暴露给客户端的接口在这个aidl文件中声明,最后在service中实现这个接口2客户端绑定客户端的serv原创 2016-08-17 18:46:31 · 1315 阅读 · 0 评论 -
ThreadPoolExecutor介绍
数据结构:AtomicInteger。他的核心代码是 public final int getAndIncrement() { for (;;) { int current = get(); int next = current + 1; if (compareAndSet(current, next))原创 2017-02-19 20:02:14 · 348 阅读 · 1 评论