Android源码分析
文章平均质量分 82
Sonic_sTorm
这个作者很懒,什么都没留下…
展开
-
android Matrix的invert实现
invert的调用及实现class SkMatrixGlue {public: static jboolean invert(jlong matrixHandle, jlong inverseHandle) { SkMatrix* matrix = reinterpre.原创 2022-04-12 22:58:22 · 2172 阅读 · 0 评论 -
Android源码中的jni方法追踪
Android源码中的jni方法通常不是按照Java_路径名_方法名定义的,都是动态注册的,那么Android的JNI_Onload函数在哪里,我们又怎么去查询对应的函数实现呢?答案就在AndroidRuntime.cpp这里定义了动态加载的RegJNIRec结构体数组static const RegJNIRec gRegJNI[] = { REG_JNI(register_com_and...原创 2018-04-03 22:17:53 · 943 阅读 · 0 评论 -
AsyncTask源码简析
(源码来自sdk7.0)构造方法构造方法有3个/** * Creates a new asynchronous task. This constructor must be invoked on the UI thread. */ public AsyncTask() { this((Looper) null); } /** ...原创 2018-02-23 01:46:43 · 287 阅读 · 0 评论 -
Looper.java分析
Looper作为Android中线程间通讯的核心,起着至关重要的作用。它与Handler,MessageQueue一起封装了一套完整的通讯机制。在调用Looper时,需要先执行prepare() 接着就可以loop()开始接收消息了。我们从来没有在应用的主线程中调用prepare()是因为在ActivityThread的main方法中public static void main(String[]...原创 2018-03-21 23:47:55 · 1647 阅读 · 0 评论 -
BitmapFactory.Options的inDensity与drawable目录的关系
源码获取图片 在BitmapFactory.decodeResource时 options通常传入null那么在调用以下方法时 /** * Decode a new Bitmap from an InputStream. This InputStream was obtained from * resources, which we pass to be able to ...原创 2018-04-03 22:30:27 · 503 阅读 · 0 评论 -
MessageQueue.java源码分析
前一篇文章Looper.java分析中已经提到mq实际上初始化nativeInit的是一个c的实例NativeMessageQueue,并将其指针reinterpret_cast<jlong>(nativeMessageQueue)保存在mPtr中@SuppressWarnings("unused") private long mPtr; // used by native ...原创 2018-04-02 20:14:35 · 630 阅读 · 0 评论 -
WebViewProvider的创建
private WebViewProvider mProvidermProvider作为WebView中一个重要的成员变量,几乎大部分WebView的方法实际实现是在这个对象里的。那么这个对象究竟是如何创建的呢?private void ensureProviderCreated() { checkThread(); if (mProvider == n原创 2017-11-21 10:53:50 · 4019 阅读 · 1 评论 -
RelativeLayout的onMeasure源码分析
都知道RelativeLayout的一次测量调用两次子视图测量循环横向一次 纵向一次带着目的, 我们来分析源码 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mDirtyHierarchy) { mDirty原创 2017-07-22 02:42:57 · 1210 阅读 · 2 评论 -
AbsListView的重用机制——“存”方法分析
AbsListView的缓存行为主要由内部类RecycleBin的addScrapView方法实现这是一个缺省修饰的方法 用于回收指定position的itemView(scrap)/** * Puts a view into the list of scrap views. * * If the list data hasn'原创 2017-07-01 16:38:35 · 673 阅读 · 0 评论 -
源码分析 ItemTouchHelper手势的入口 (OnInterceptTouchEvent onLongPress等)
ItemTouchHelper手势的实现都在匿名内部类mOnItemTouchListener中实现,private final OnItemTouchListener mOnItemTouchListener = new OnItemTouchListener()与RecyclerView的绑定,则在attachToRecyclerView方法中的setu原创 2017-07-04 19:53:18 · 1046 阅读 · 1 评论 -
BaseAdapter的stableIds用处
用了ListView一万年,久仰public boolean hasStableIds() { return false; }方法大名九千年,就是一直不知道这属性到底有什么用。今天就来彻底弄清楚!stackoverflow.com上有一篇issue相关:what-is-the-meaning-of-stableidsStable ID原创 2017-07-02 16:55:33 · 982 阅读 · 0 评论 -
AppCompatActivity的魔术——如何做到适配新控件
大家都知道google要求使用app的模板类继承AppCompatActivity这是一个继承FragmentAcvitivy的类,他是怎么做到让过时控件去使用酷炫的新特性的呢?来看源码核心变量 private AppCompatDelegate mDelegate;这是兼容的老套路,便于在版本迭代的时候统一维护升级与兼容 /** * @return The {原创 2017-07-11 17:28:17 · 2310 阅读 · 0 评论 -
ItemTouchHelper源码分析 拖拽到屏幕边缘的处理
如果列表被拖拉到屏幕边缘 该runnable会被递归调用 /** * When user drags a view to the edge, we start scrolling the LayoutManager as long as View * is partially out of bounds. */ final Runnable mSc原创 2017-07-03 20:17:04 · 2068 阅读 · 3 评论 -
Android手势 怎么样才算长按(GestureDetector源码)
GestureDetector里onLongPress方法的回调来自 private void dispatchLongPress() { mHandler.removeMessages(TAP); mDeferConfirmSingleTap = false; mInLongPress = true; mListener.原创 2017-07-05 15:58:30 · 1078 阅读 · 0 评论 -
ItemTouchHelper实现部分响应拖动
/** * Starts dragging the provided ViewHolder. By default, ItemTouchHelper starts a drag when a * View is long pressed. You can disable that behavior by overriding * {@link ItemTouch原创 2017-07-04 23:23:17 · 2311 阅读 · 1 评论 -
ItemTouchHelper源码分析 手势分析OnTouchEvent
ItemTouchHelper手势的实现都在匿名内部类mOnItemTouchListener中实现,private final OnItemTouchListener mOnItemTouchListener = new OnItemTouchListener()与RecyclerView的绑定,则在attachToRecyclerView方法中的setupCal原创 2017-07-04 00:21:21 · 1288 阅读 · 0 评论 -
RecyclerView回收机制分析--“取”
RecyclerView的回收被封装在内部类Recycler中 从这个类的成员变量就能略窥一斑 /** * A Recycler is responsible for managing scrapped or detached item views for reuse. * * A "scrapped" view is a view that is stil原创 2017-07-01 17:48:18 · 3549 阅读 · 0 评论