
Android艺术开发阅读
pin-csdn
keep moving
展开
-
第十五章-Android性能优化
推荐个音乐下载app【佳语音乐下载】https://github.com/gaopinqiang/checkVersion/raw/master/Music_Download.apk第十四章-JNI和NDK编程这个我在之前的博客中有写过,书中也只是简单的介绍了下开发的流程。所以可以参考之前的博客就行。https://blog.youkuaiyun.com/gaopinqiang/article/det...原创 2020-04-26 23:07:25 · 316 阅读 · 0 评论 -
第十三章-综合技术(CrashHandler、MultiDex、动态加载、反编译)
一、使用CrashHandler来获取应用的crashAndroid应用不可避免地会发生crash,也称之为崩溃,无论你的程序写得有多么完美,总是无法完全避免crash的发生,可能是由于Andriod系统底层的bug,也可能是由于不充分的机型适配或者糟糕的网络状况。Android提供了处理这类问题的方法,请看Thread类中的一个方法setDefaultUncaughtExceptionHand...原创 2020-04-26 22:47:55 · 370 阅读 · 0 评论 -
第十二章-实现一个ImageLoader
一、ImageLoader的实现功能介绍前面了解了Bitmap的高效加载方式、LruCache以及DiskLruCache,现在我们来实现一个优秀的ImageLoader。一个优秀的ImageLoader应该具备如下功能:图片的同步加载图片的异步加载图片压缩内存缓存磁盘缓存网络拉取图片的同步加载是指能够以同步的方式向调用者所提供加载的图片,这个图片可能是从内存缓存中读取的,也...原创 2020-04-18 22:43:40 · 245 阅读 · 0 评论 -
第十二章-Bitmap的加载和Cache(缓存策略、LruCache、DiskLruCache)
本章的主题是Bitmap的加载和Cache,主要包含三个方面的内容。首先讲述如何有效的加载一个Bitmap,这是一个很有意义的话题,由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16MB,这就导致加载Bitmap的时候很容易的出现内存溢出。下面这个异常在开发中应该时常遇到:java.lang.OutofMemoryError:bitmap size exceeds V...原创 2020-04-15 23:16:42 · 412 阅读 · 0 评论 -
第十一章-Android线程和线程池(AsyncTask、HandlerThread、IntentService)
Android中的线程形态本节将对Android中的线程形态做一个全面的介绍,除了传统的Thread以外,还包含了AsyncTask,HandlerThread以及IntentService,这三者的底层实现也是线程,但是他们具有特殊的表现形式,同时在使用上也各有优缺点,下面从源码的角度来分析AsyncTask的执行过程。一、AsyncTaskAsyncTask是一种轻量级的异步任务类...原创 2020-04-14 23:48:54 · 325 阅读 · 0 评论 -
第十章-Android的消息机制(MessageQueue、Looper、Handler)
一、消息队列的工作原理消息队列在Android中指的是MessageQueue,MessageQueue主要包含两个操作:插入和读取。读取操作本身会伴随着删除操作,插入和读取对应的方法分别为enqueueMessage和next,其中enqueueMessage的作用是往消息队列中插入一条消息,而next的作用是从消息队列中取出一条消息并将其从消息队列中移除。尽管MessageQueue叫消息队...原创 2020-04-13 22:19:57 · 340 阅读 · 0 评论 -
第十章-Android的消息机制(ThreadLocal工作原理)
一、ThreadLocal用途简介及示例上述的两种方法都是有局限性的。第一种方法的问题是当函数调用栈很深的时候,通过函数参数来传递监听器对象这几乎是不可接受的,这会让程序设计看起来很糟糕。第二种是可以接受,但是这种状态是不具有可扩展性的,比如同时两个线程在执行,那么需要提供两个静态的监听器对象,如果10个线程在并发执行呢?就需要10个监听器?这显然是不可思议的,而采取ThreadLocal,...原创 2020-04-12 22:33:16 · 281 阅读 · 0 评论 -
第九章-四大组件的工作过程(ContentProvider的工作过程-基于Android8.1源码)
一、使用ContentProvider示例:1、在一个单独的app(B)中定义个MyContentProviderpackage com.example.provider;import android.content.ContentProvider;import android.content.ContentValues;import android.database.Cursor;...原创 2020-04-12 22:29:49 · 195 阅读 · 0 评论 -
第九章-四大组件的工作过程(BroadcastReceiver的工作过程-基于Android8.1源码)
本章介绍BroadcastReceiver的工作过程,主要包含两方面的内容,一个是广播的注册过程,另一个是广播的发送和接收过程。一、BroadcastReceiver的使用这里简单回顾下广播的使用方法: class MyReceiver extends BroadcastReceiver{ @Override public void onReceive(...原创 2020-04-10 23:42:12 · 193 阅读 · 0 评论 -
第九章-四大组件的工作过程(Service的工作过程-基于Android8.1源码)
我们将介绍Service的启动过程和绑定过程,在分析Service的工作过程之前,我们先来了解一下如何使用Service。Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其他组件和Service的交互。需要注意的是,这两种状态是可以共存的。启动Intent intent = new Intent(this, MyService.class);...原创 2020-04-09 23:06:19 · 176 阅读 · 0 评论 -
第九章-四大组件的工作过程(Activity的启动过程-基于Android9.0源码)
四大组件的运行状态一、Activity的工作过程Activity作为很重要的一个组件,其内部工作过程系统做了很多的封装,这使得启动一个Activity变得异常简单。在显示调用的情况下,只需要通过如下代码即可完成:Intent intent = new Intent(this, TestActivity.class);startActivity(intent);通过上面的代...原创 2020-04-06 23:27:12 · 404 阅读 · 0 评论 -
第八章-Window的创建过程
1、Activity的Window创建过程要分析Activity的Window创建过程就必须了解activity的启动过程,详细的过程在后面分析,大概了解即可。Activity的启动过程很复杂,最终会由ActivityThread中的perfromLaunchActivity()来完成整个启动过程,这个方法内部会通过类加载器创建Activity的实例对象,并且调用其attach方法为其关...原创 2020-04-05 00:15:24 · 327 阅读 · 0 评论 -
第八章-理解Window和WindowManager(内部机制)
关于第六章(Drawable)和第七章的说明:第六章主要讲解Android的一些Drawable,并不涉及到一些原理方面的知识。只需要实际开发的过程中查阅相关的资料即可。第七章主要讲解Android的一些动画实现。我在之前的博客中也做了一些介绍,这里就不再重复的记录了。不难。这里给个链接地址:https://blog.youkuaiyun.com/gaopinqiang/article/details/5...原创 2020-04-04 18:31:36 · 215 阅读 · 0 评论 -
第五章-RemoteViews内部机制
一、RemoteViews内部机制RemoteViews的作用在其他进程中显示并且更新View的界面,为了更好地理解它的内部机制,我们来看一下他的主要功能。首先我们看一下他的构造方法,这里介绍一个最常用的构造方法public RemoteViews(String packageName, int layoutId) { this(getApplicationInfo(packageNa...原创 2020-04-02 23:17:12 · 221 阅读 · 0 评论 -
第五章-RemoteViews应用
一、RemoteViews的应用RemoteViews在实际的开发中,主要用在通知栏和桌面小部件的开发过程中。通知栏每个人都不陌生,主要是通过NotificationManager的notify方法去实现的,它除了默认效果外,还可以另外自定义布局。桌面小部件则是通过AppWidgetProvider来实现的,AppWidgetProvider本质上就是一个广播。通知栏和桌面小部件的开发过程中都...原创 2020-03-31 22:53:52 · 437 阅读 · 0 评论 -
第四章-View的工作原理(自定义View)
一、自定义View的分类二、自定义View的须知三、自定义View的实例直接继承View这个view处理了一些常见的问题,是一个比较规范的示例。支持xml配置wrap_parent支持padding支持xml自定义属性View的代码:package com.example.custom;import android.content.Context;import and...原创 2020-03-30 21:24:55 · 218 阅读 · 0 评论 -
第四章-View的工作原理(measure、layout、draw)
View的工作流程主要是指measure、layout、draw这三大流程,即测量、布局和绘制。其中measure确定View的测量宽/高,layout确定View的最终宽/高和四个顶点的位置,而draw则将View绘制到屏幕上。1、measure过程measure过程要分情况来看,如果只是一个原始的View,那么通过measure方法就可以完成了其测量过程,如果是一个ViewGroup,...原创 2020-03-29 19:58:16 · 395 阅读 · 0 评论 -
第四章-View的工作原理(MeasureSpec、LayoutParams)
主要介绍一下View的工作原理,还有自定义View的实现方法,在Android知识体系中,View是一个很重要的角色,简单来说,View是Android中视觉的呈现。在界面上Android提供了一套完整的GUI库,里面有很多控件,但是有时候往往并不能满足于需求,所以只有自定义View了。除了View的三大流程之外,View常见的回调方法也是必须掌握的,比如构造方法,onAttach,onVis...原创 2020-03-28 21:21:03 · 208 阅读 · 0 评论 -
第三章-View事件体系(事件分发机制、滑动冲突解决)
一、View的事件分发1、点击事件的传递规则在介绍点击事件的传递规则之前,首先明白分析的对象就是MotionEvent,即点击事件。所谓点击事件的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MoonEvent产生了以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程由三个很重要的分发来完成dispatchTouchEvent...原创 2020-03-27 23:31:19 · 286 阅读 · 0 评论 -
第三章-View事件体系(View的滑动、弹性滑动)
View的滑动使用scrollTo/scrollBy使用动画改变布局参数各种滑动方式的对比弹性滑动使用Scroller通过动画‘使用延时策略在上一节介绍了View的一些基础知识和概念,本节开始介绍很重要的一个内容:View的滑动。在Android设备上,滑动几乎是应用的标配,不管是下拉刷新还是SlidingMenu,它们的基础都是滑动。从另外一方面来说,Android手...原创 2020-03-26 23:36:19 · 241 阅读 · 0 评论 -
第三章-View事件体系(基础介绍)
View基础知识什么是ViewView的位置参数MotionEvent和TouchSlopVelocityTracker,GestureDetector和Scroller一、View的基础知识本节主要介绍View的一些基础知识,从而为更好地介绍后续的内容做铺差,主要介绍的内容有:View的位置参数、MotionEvent和TouchSlop、VelocityTracker,Ge...原创 2020-03-26 21:28:46 · 228 阅读 · 0 评论 -
第二章-IPC机制-Binder连接池
下面通过一个实际的例子演示(已通过本地代码调试运行)一、服务端代码:1、我们提供了两个AIDL接口(ISecurityCenter和ICompute)来模拟上面提到的多个业务模块都要使用AIDL的情况,其中ISecurityCenter接口提供解密功能,声明如下:// ISecurityCenter.aidlpackage com.example.binderpoolserver;...原创 2020-03-25 23:17:36 · 224 阅读 · 0 评论 -
第二章-IPC机制-Android中的各种IPC方式(AIDL)
上一节我们介绍了使用Messenger来进行进程间通信的方法,可以发现,Messenger是以串行的方式处理客户端发来的消息,如果大量的消息同时发送到服务端,服务端仍然只能一个个处理,如果有大量的并发请求,那么用Messenger就不太合适了。同时,Messenger的作用主要是为了传递消息,很多时候我们可能需要跨进程调用服务端的方法,这种情形用Messenger就无法做到了,但是我们可以使用A...原创 2019-11-03 00:22:00 · 222 阅读 · 0 评论 -
第二章-IPC机制-Android中的各种IPC方式(Bundle、文件共享、Messenger)
我们了解了IPC的几个基础知识:序列化和Binder,本节详细分析各种跨进程通信方式。具体方式有很多,比如可以通过在Intent中附加extras来传递消息,或者通过共享文件的方式来共享数据,还可以采用Binder方式来跨进程通信,另外,ContentProvider天生就是支持跨进程访问的。通过Socket也可以实现IPC,上述的各种方法都能实现IPC,他们的使用方式和侧重点上有很大的区别,我...原创 2019-11-01 23:49:53 · 214 阅读 · 0 评论 -
第二章-IPC机制-基础概念Serializable、Pacelable、Binder
本节主要介绍IPC中的一些基础概念,主要包含三方面内容;Serializable接口,Parcelable接口以及Binder,只有熟悉这三方面的内容后,我们才能更好地理解跨进程通信的各种方式。Serializable和Parcelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializable。还有的时候我们需要...原创 2019-11-01 00:00:24 · 487 阅读 · 0 评论 -
第二章-IPC机制-IPC简介及多进程模式
1、Android IPC简介本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化机制和Binder,然后详细的介绍Bundle,文件共享,AIDL,Messenger,ContentProvider和Socket等进程间通讯的方式。为了更好的使用AIDL进行进程间通讯,本章引入了Binder连接池的概...原创 2019-10-30 22:38:02 · 750 阅读 · 0 评论 -
第一章-intentFilter的匹配规则
1、序言:我们知道,启动Activity分为两种,显示调用和隐式调用,二者的区别这里就不多讲了,显示调用需要明确的指定被启动对象的组件信息,包括包名和类名,而隐式意图则不需要明确指定调用信息,原则上一个intent不应该即是显式调用又是隐式调用,如果二者共存的话以显式调用为主,显式调用很简单,这里主要介绍隐式调用,隐式调用需要intent能够匹配目标组件的IntentFilter中所设置的过滤...原创 2019-08-27 23:19:01 · 175 阅读 · 0 评论 -
第一章-Activity的启动模式和Flags
首先说一下Activity为什么需要启动模式,我们知道,在默认的情况下,当我们多次启动同一个Activity的时候,系统会创建多个实例并把他们一一放入任务栈中,当我们点击back键的时候会发现这些Activity会一一回退,任务栈是一种先进先出的栈结构,这个好理解, 每按一次back键就有一个activity退出栈,直到栈空为止,当这个栈为空的时候,系统就会回收这个任务栈,关于任务栈的系统工作原...原创 2019-08-26 23:51:06 · 256 阅读 · 0 评论 -
第一章-Activity的生命周期
1、序言作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是”活动”的意思,但是主席觉得这样翻译有些生硬,直接翻译成“界面”可能更好,的确,Activity主要也是用于UI效果的呈现,不过两者翻译都不为过,我们知其意就行了,正常情况下,我们除了Wi...原创 2019-08-25 23:04:41 · 222 阅读 · 0 评论