7 Sonic_sTorm

尚未进行身份认证

暂无相关描述

等级
博文 24
排名 29w+

ndk r17版本不再支持mips

编译报错AndroidSdk/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip是因为r17版本不再支持mips找不到对应文件如果不需要编译对应架构可以再build.gradle中配置packagingOptions{...

2018-05-28 10:47:43

centOS命令行装androidSDK

linux中安装ndk与配置ndk环境变量:1、首先是官网找最新的linux下ndk安装包https://developer.android.google.cn/ndk/downloads/index.html复制链接wget下来2、unzip解压缩到{目标安装目录}3、这时候就需要配置环境变量了。环境变量的调用顺序一般为etc/profile->~/.bash_profile->...

2018-04-15 01:14:35

基于比较的排序时间下界

一个长度为n的集合排序的结果有n!个结果。以比较为基础的排序方式可以看做二叉树,每个非叶节点左右决定每次比较大小的走向,那么显然所有的排序结果都是在这个二叉树上的叶子(存在可能一结果多个叶子)。已知叶子节点数为不少于n!个,那么时间复杂度下界的求解就转化为,求解:一个已知叶子节点数不小于n!的二叉树的深度——即log(n!)当n>1时有n!>=n(n-1)(n-2)...(n/2)...

2018-04-08 00:17:51

BitmapFactory.Options的inDensity与drawable目录的关系

源码获取图片在BitmapFactory.decodeResource时options通常传入null那么在调用以下方法时/***DecodeanewBitmapfromanInputStream.ThisInputStreamwasobtainedfrom*resources,whichwepasstobeableto...

2018-04-03 22:30:27

Unsafe类的CAS

在FutureTask中使用到了大量Unsafe类的compareAndSwapObject方法在遇到线程安全问题时,我们通常需要使用锁来解决问题。而其中分为悲观锁与乐观锁,java中的synchronize关键字使用的就是悲观锁,它完全排除其他线程操作的可能,让其他有可能操作的线程挂起,独占资源直至操作结束,释放锁。虽然保证了安全,但是效率极低。而CompareAndSwap则是一种乐观锁,它...

2018-04-03 22:29:51

Android源码中的jni方法追踪

Android源码中的jni方法通常不是按照Java_路径名_方法名定义的,都是动态注册的,那么Android的JNI_Onload函数在哪里,我们又怎么去查询对应的函数实现呢?答案就在AndroidRuntime.cpp这里定义了动态加载的RegJNIRec结构体数组staticconstRegJNIRecgRegJNI[]={REG_JNI(register_com_and...

2018-04-03 22:17:53

linux的epoll实现

今天读到Looper的native实现中间是依赖linux底层的epoll实现的,所以把今天了解到的相关知识做个整理。epoll是linux多路复用机制中select/poll的升级版。先谈谈select/poll代理即规避了单路阻塞式在多路并发时的线程/进程开销,又规避了忙轮询式一直不停的问询所有流带来的损耗。只在有I/O事件更新的时候再遍历所有流。但这种机制还是有缺点,如果管道/流的数量很...

2018-04-03 22:08:59

线程局部存储TLS

这里说的不是ssl里得安全传输协议。它的全名是Thread-LocalStorage线程局部存储。又叫TSD:Thread-SpecificData线程特有数据池在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,在栈里,其不存在线程安全问题。但是全局变量和函数内定义的静态变量就不同了。我们可以用锁来处理(但效率太低);可以通过原子操作来实现(但不支持自定义...

2018-04-03 22:05:46

MessageQueue.java源码分析

 前一篇文章Looper.java分析中已经提到mq实际上初始化nativeInit的是一个c的实例NativeMessageQueue,并将其指针reinterpret_cast<jlong>(nativeMessageQueue)保存在mPtr中@SuppressWarnings("unused")privatelongmPtr;//usedbynative...

2018-04-02 20:14:35

Looper.java分析

Looper作为Android中线程间通讯的核心,起着至关重要的作用。它与Handler,MessageQueue一起封装了一套完整的通讯机制。在调用Looper时,需要先执行prepare()接着就可以loop()开始接收消息了。我们从来没有在应用的主线程中调用prepare()是因为在ActivityThread的main方法中publicstaticvoidmain(String[]...

2018-03-21 23:47:55

eventfd函数

eventfd是从LINUX2.6.27版本开始增加的,主要用于进程或者线程间的通信(如通知/等待机制的实现)。实现了线程之间事件通知的方式,也可以用于用户态和内核通信。eventfd的缓冲区大小是sizeof(uint64_t);向其write可以递增这个计数器,read操作可以读取,并进行清零;eventfd也可以放到监听队列中,当计数器不是0时,有可读事件发生,可以进行读取。函数原型:#i...

2018-03-21 16:38:34

AsyncTask源码简析

(源码来自sdk7.0)构造方法构造方法有3个/***Createsanewasynchronoustask.ThisconstructormustbeinvokedontheUIthread.*/publicAsyncTask(){this((Looper)null);}/**...

2018-02-23 01:46:43

jdk8 HashMap源码分析

我们都知道java的HashMap使用分离链接法实现staticfinalintDEFAULT_INITIAL_CAPACITY=1staticfinalintMAXIMUM_CAPACITY=1staticfinalfloatDEFAULT_LOAD_FACTOR=0.75f; //默认装填因子staticfinalintTRE

2018-01-23 11:32:33

WebViewProvider的创建

privateWebViewProvidermProvidermProvider作为WebView中一个重要的成员变量,几乎大部分WebView的方法实际实现是在这个对象里的。那么这个对象究竟是如何创建的呢?privatevoidensureProviderCreated(){checkThread();if(mProvider==n

2017-11-21 10:53:50

RelativeLayout的onMeasure源码分析

都知道RelativeLayout的一次测量调用两次子视图测量循环横向一次纵向一次带着目的,我们来分析源码@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){if(mDirtyHierarchy){mDirty

2017-07-22 02:42:57

AppCompatActivity的魔术——如何做到适配新控件

大家都知道google要求使用app的模板类继承AppCompatActivity这是一个继承FragmentAcvitivy的类,他是怎么做到让过时控件去使用酷炫的新特性的呢?来看源码核心变量 privateAppCompatDelegatemDelegate;这是兼容的老套路,便于在版本迭代的时候统一维护升级与兼容/***@returnThe{

2017-07-11 17:28:17

Android手势 怎么样才算长按(GestureDetector源码)

GestureDetector里onLongPress方法的回调来自privatevoiddispatchLongPress(){mHandler.removeMessages(TAP);mDeferConfirmSingleTap=false;mInLongPress=true;mListener.

2017-07-05 15:58:30

ItemTouchHelper实现部分响应拖动

/**   *StartsdraggingtheprovidedViewHolder.Bydefault,ItemTouchHelperstartsadragwhena   *Viewislongpressed.Youcandisablethatbehaviorbyoverriding   *{@linkItemTouch

2017-07-04 23:23:17

源码分析 ItemTouchHelper手势的入口 (OnInterceptTouchEvent onLongPress等)

ItemTouchHelper手势的实现都在匿名内部类mOnItemTouchListener中实现,privatefinalOnItemTouchListenermOnItemTouchListener=newOnItemTouchListener()与RecyclerView的绑定,则在attachToRecyclerView方法中的setu

2017-07-04 19:53:18

ItemTouchHelper源码分析 手势分析OnTouchEvent

ItemTouchHelper手势的实现都在匿名内部类mOnItemTouchListener中实现,privatefinalOnItemTouchListenermOnItemTouchListener=newOnItemTouchListener()与RecyclerView的绑定,则在attachToRecyclerView方法中的setupCal

2017-07-04 00:21:21
奖章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!