Android源码解析
lin111000713
这个作者很懒,什么都没留下…
展开
-
Timer定时器实现源码分析
Timer实现使用:入口1:private Timer mTimer = new Timer();入口2:mTimer.schedule(new TimerTask() { // schedule(TimerTask task, long delay, long period) @Override public void run() {原创 2016-08-07 22:20:42 · 705 阅读 · 6 评论 -
ViewPager简单实现
package com.edu.fzu.news.view;import android.content.Context;import android.graphics.PointF;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import andr原创 2016-08-12 08:48:50 · 294 阅读 · 0 评论 -
Asynctask实现源码分析
Asynctask实现(源代码2.2)使用: 1.继承并实现Asynctask,实现类DownloadFilesTask 2.新建对象,并调用execute。new DownloadFilesTask().execute(param);入口1:继承并实现Asynctask,实现类DownloadFilesTask /** * Creates a new async原创 2016-08-03 20:58:19 · 289 阅读 · 0 评论 -
IntentServcie实现分析
1.使用public class CoreService extends IntentService { String ex = ""; private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) {原创 2016-09-02 21:53:08 · 367 阅读 · 0 评论 -
主线程消息循环机制本质
1.主线程消息循环:ActivityThread主线程的入口方法:main main() { Looper.prepareMainLooper(); // 创建Looper,并添加到线程中 Looper.loop(); // 死循环查询,取出Message,执行Message绑定的Handler的handleMessage } Looper.prepareMainLooper-->原创 2016-09-01 17:26:43 · 1103 阅读 · 0 评论 -
XUtils的BitmapUtils实现分析:
调用:BitmapUtils.display(ImageView, url);public T extends View> void display(T container, String uri, BitmapDisplayConfig displayConfig, BitmapLoadCallBackT> callBack) { if (container == null)原创 2016-08-26 14:49:09 · 843 阅读 · 1 评论 -
Xutils之ViewUtils解析
使用:ViewUtils.inject(this, rootView); // fragment中源码分析: public static void inject(Object handler, View view) { injectObject(handler, new ViewFinder(view)); //ViewFinder是对Fragment中的rootView或A原创 2016-08-14 16:04:55 · 799 阅读 · 0 评论 -
LinkedHashMap原理分析
LinkedHashMap原理分析一.实现LinkedHashMap继承HashMap数据结构:HashMapEntry(key,value)--》LinkedHashMapEntry(key,value+before指针和after指针(双向链表))1.构造函数LinkedHashMap/* accessOrder true if the ordering should be do原创 2017-07-29 15:11:30 · 334 阅读 · 0 评论 -
HashTable实现
1.散列函数的实现算法:Doug Lea’s supplemental secondaryHash function (inlined).碰撞解决:采用拉链法,实现的过程基本同<算法>拉链法:数组+链表(每个数组的item是链表)实现2.构造函数public HashMap() { table = (HashMapEntry<K, V>[]) EMPTY_TABLE; // th原创 2017-07-29 15:26:15 · 300 阅读 · 0 评论 -
LruCache实现
实现很简单,就相当于封装了LinkedHashMap(开启Lru算法),只是每次删除的时候检查当前数据大小是否超过阈值,如果超过则调用LinkedHashMap最老的元素(循环双向链表中维护的)原创 2016-05-05 08:14:38 · 377 阅读 · 0 评论 -
LruCache原理分析
LinkedHashMap原理分析一.实现LinkedHashMap继承HashMap数据结构:HashMapEntry(key,value)--》LinkedHashMapEntry(key,value+before指针和after指针(双向链表))1.构造函数LinkedHashMap/* accessOrder true if the ordering should be do原创 2017-07-29 15:41:52 · 267 阅读 · 0 评论 -
RecyclerView改造成ViewPager思路
1.实现每个子Item的全屏显示自定义一个全屏的Adapter,当Adapter创建根View的时候,强制设置根View的布局参数为MATCH_PARENT。并且覆盖掉/** * Adapters to set all of the child view to full screen * * @author lby 20/07/2017 */public abstract class原创 2017-08-28 13:45:44 · 2093 阅读 · 0 评论 -
ViewPager实现源码分析
1、松手自动计算当前位置,并自动滑动到合适的position的页面分析:松手属于View的事件分发机制,事件分发的入口在dispatchTouchEvent和onTouchEvent,大概的分发机制如下: public boolean dispatchTouchEvent(MotionEvent ev) { boolean consume = false; i原创 2017-08-28 13:48:19 · 451 阅读 · 0 评论 -
BadgeView实现源码分析
BadgeView实现:public class BadgeView extends TextView-->本质是TextView (BadgetView:徽章,奖章)使用View target = findViewById(R.id.target_view);BadgeView badge = new BadgeView(this, target);badge.setText原创 2016-08-07 12:26:55 · 375 阅读 · 0 评论 -
JSONObject解析json字符串实现
JSONObject解析json字符串实现1.题目:从最简单的使用开始{"name1": "休闲","name2": "棋牌","name3": "益智","url1": "image/category_game_0.jpg","url2": "image/category_game_1.jpg","url3": "image/category_game_2.jpg原创 2016-04-28 22:46:36 · 6115 阅读 · 0 评论 -
ViewDragHelper实现分析
分析滑动的时候如何回调CallBack中的方法一、使用 @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); mDragHelper = ViewDragHelper.create(this, 1.0f, new OurViewDragHelperCa原创 2016-06-20 22:49:31 · 422 阅读 · 0 评论 -
Choreographer实现机制_源码分析
一.使用If your application does its rendering in a different thread, possibly using GL, or does not use the animation framework or view hierarchy at all and you want to ensure that it is appropriately原创 2016-05-19 09:08:38 · 1726 阅读 · 0 评论 -
ObjectAnimator实现机制_源码分析
一.使用入口1: ObjectAnimator anim = ObjectAnimator.ofInt(foo, "alpha", 1, 100);入口2: anim.setDuration(1000);anim.start();二.实现0.ObjectAnimator继承ValueAnimator1.入口1: ObjectAnimator anim = O原创 2016-05-19 09:09:16 · 820 阅读 · 0 评论 -
ValueAnimator实现机制_源码分析
一.使用ValueAnimator valueAnimator = ValueAnimator.ofInt(1, 100);// 入口1valueAnimator.addUpdateListener(new AnimatorUpdateListener() {// 入口2// 持有一个IntEvaluator对象,方便下面估值的时候使用private IntEval原创 2016-05-19 09:09:56 · 1014 阅读 · 0 评论 -
消息机制实现_源码分析
1.主要涉及到三个类MessageQueue,Looper,Handler.附带一个ThreadLocal其中Looper类为引擎,ThreadLocal保存所有线程创建的Looper实例,以map(key=Thread,value=Looper对象)形式保存为何Looper类是引擎?因为Looper维护ThreadLocal和MessageQueue(MessageQueue维护Mess原创 2016-05-19 09:10:37 · 346 阅读 · 0 评论 -
TabHost实现机制_源码分析
0.TabHost使用Demo布局文件:android:id="@android:id/tabhost"android:layout_width="match_parent"android:layout_height="match_parent" >android:layout_width="match_parent"android:layout_heigh原创 2016-05-19 09:11:22 · 411 阅读 · 0 评论 -
StateListDrawable实现机制
一.使用二.实现问1:view如何绘制drawable到自己身上?View.javapublic void draw(Canvas canvas) {...// Step 1, draw the background, if neededfinal Drawable background = mBackgrou原创 2016-05-19 09:12:02 · 423 阅读 · 0 评论 -
PropertyValuesHolder实现机制
一.使用二.实现/*该类维护一个属性和该属性对应的一堆的KeyframeSet*/PropertyValuesHolder {String mPropertyName;KeyframeSet mKeyframeSet = null;protected Property mProperty;Method mSetter = nu原创 2016-05-19 09:12:33 · 320 阅读 · 0 评论 -
属性src和background区别
src一般只有ImageView才有这个属性一、View的background属性分析首先分析View的draw过程 // View.java public void draw(Canvas canvas) { final int privateFlags = mPrivateFlags; final boolean dirtyOpa原创 2016-06-25 12:09:33 · 1041 阅读 · 0 评论 -
IMessenger源码
/* * This file is auto-generated. DO NOT MODIFY. * Original file: frameworks/base/core/java/android/os/IMessenger.aidl */package android.os;/** @hide */public interface IMessenger ext转载 2016-05-23 08:48:30 · 1333 阅读 · 0 评论 -
Messenger源码分析
一.使用:参考file:///E:/sdk/adtbundlewindows64/sdk/docs/guide/components/bound-services.html#BindingUsing Messager二.源码分析IMessage.aidl/** @hide */oneway interface IMessenger {void send(in Messag原创 2016-05-23 08:51:02 · 555 阅读 · 0 评论 -
Binder实现机制--应用分析
一.Binder裸实现--不用aidl,自己手动实现发送和接收:核心在发送:transact调用,接收:onTransact1.客户端// myActivity.java// ………public class myActivity extends Activity implements OnClickListener {private IBinder ib = null;原创 2016-05-23 08:49:31 · 298 阅读 · 0 评论 -
ViewPager简单实现分析
public void setAdapter(PagerAdapter adapter) { final PagerAdapter oldAdapter = mAdapter; mAdapter = adapter; mExpectedAdapterCount = 0; if (mAdapter != null) { if (mObserver == null) { mObserver = new原创 2016-06-11 12:16:11 · 316 阅读 · 0 评论 -
ThreadLocal实现
1.用法 private ThreadLocal mBooleanThreadLocal = new ThreadLocal();...mBooleanThreadLocal.set(true);mBooleanThreadLocal.get();...new Thread() {public void run() {mBooleanThreadLocal.set(原创 2016-05-05 08:15:25 · 357 阅读 · 0 评论 -
eclipse导入Andrdoid源码
Eclipse导入Android全套源码是非常方便,只要姿势正确,一般的电脑都不会出现假死现象:只需要在将development\ide\eclipse\.class文件copy 到Android源码根目录,再从某个模块下copy一个.project文件到源码根目录,用eclipse导入以后就像一个普通工程一样(而且是真的不需要编译)原创 2017-08-28 18:51:10 · 271 阅读 · 0 评论