自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

RikkaTheWorld

El Psy Congroo

  • 博客(20)
  • 收藏
  • 关注

原创 Android 开发艺术探索笔记(21)

消息队列的工作原理 MessageQueue有两个操作:插入和读取。读取本身会伴随着删除操作。插入和读取分别对应enqueueMessage和next。 关于enqueueMessage的源码就是在单链表上添加新的message。 next则是一个无限循环,当有消息在队列里时,则会返回这条消息并将其从列表中移除,否则一直阻塞在这里。Looper的工作原理 就是Looper一直查看Mes...

2018-07-31 22:52:14 222

原创 Android 开发艺术探索笔记(20)

Android的消息机制概述 首先任何的UI操作都要在UI线程即主线程中进行,ViewRootImpl中就对UI操作做了验证,这个验证工作是由ViewRootImpl的checkThread完成的。Handler的存在主要是为了子线程无法访问UI线程的问题。当我们要那样子做的时候,我们要给当前线程创建Looper,或者在一个有Looper的线程中创建一个Handler。 Handler创建完毕...

2018-07-30 23:42:47 260

原创 Android 开发艺术探索笔记(19)

BroadcastReceiver的工作过程 这里了解广播的注册删除过程还有发送接收过程。 广播的注册过程 广播注册分为静态注册和动态注册,静态注册在应用安装后系统自动完成注册,具体来说是由PMS(PackageManagerService)来完成整个注册过程。 而动态注册的过程是从ContextWrapper的registerReceiver开始的,和Activity、Service一样...

2018-07-28 20:05:33 225

原创 Android 开发艺术探索笔记(18)

1. Activity的工作过程 我们从startActiviity方法开始分析,startActivity有好几种重载方式,但最终都会调用startActivityForResult方法,它的实现如下: 在mParent == null中,mParent代表的是ActivityGroup。ActivityGroup最开始被用来在一个界面中嵌入多个子Activity,但是其在API13...

2018-07-25 16:30:42 251

原创 Android 开发艺术探索笔记(17)

Window的删除过程 Window的删除过程和添加差不多,也是实现WindowManagerImpl后,进一步桥接WindowManagerGlobal来实现。下面是WindowManagerGlobal的removeView实现: 这个逻辑比较清晰,就是用findViewLocked去查找View的索引,然后通过removeViewLocked去删除这个View。这个方法里通过View...

2018-07-24 18:32:01 253

原创 java中==、equals和hashcode的区别

equals equals的作用是判断两个对象是否相等。 通过判断两个对象的地址是否相同来判断。== ==一般用于基本类型数据的比较,判断两个值是否相同 也可以用于类的比较,同样也是比较两个对象的内存地址。(就是两个对象都是同一个对象) 所以在equals没覆盖的情况下,==和equals是等价的。 ( 我们可以通过覆盖equals来让相同内容的对象来返回true。)hashco...

2018-07-24 00:36:26 392

原创 Android 开发艺术探索笔记(16)

插值器和估值器 TimeInterpolator中文翻译为时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性改变的百分比。系统预置了一些插值器(线性插值器,加减速插值器等)。 TypeEvaluator的中文翻译为类型估值算法,也叫估值器,它的作用是根据当前属性改变的百分比来计算改变后的属性值。系统也预置了一些估值器。 插值器和估值器的作用是让动画进行非匀速运动。 这是一组动画...

2018-07-23 15:52:05 349

原创 Android 开发艺术探索笔记(15)

帧动画帧动画是播放一组预定好的图片,类似于电影播放。 系统提供了另一个类AnimationDrawable来使用帧动画。用法是现在XML用< animation-list>来放入帧Drawable,然后将上述的Drawable作为View的背景来播放动画。Button mButton = findViewById(R.id.button);mButton.setBack...

2018-07-22 20:54:25 270

原创 Android 开发艺术探索笔记(14)

LayerDrawable layerDrawable的标签是< layer-list>,他表示的是一种层次化的Drawable集合。通过将不同的Drawable放置在不同的层面上从而达到的一种叠加后的效果。语法如下图: 一个layer-list可以包含多个item,每个item是一个Drawable里面的属性是它的偏移量。默认情况下layer-list中所有的item都会被...

2018-07-21 18:26:57 209

原创 Android 开发艺术探索笔记(13)

RemoteView的内部机制RemoteView所支持的类型有 Layout:RelateLayout、LinearLayout、FrameLayout、GridLayout View:主要的有ListView、GridView、ImageView、Button、ImageButton、TextView等。 RemoteView没有findViewById方法来访问里面的View,而必...

2018-07-20 17:45:57 285

原创 Android 开发艺术探索笔记(12)

RemoteView的理解RemoteView在实际开发的应用中主要使用在通知栏和桌面小窗口上。 通知栏是利用NotificationManager的notify来实现的,它除了默认效果外,还可以另外定义布局。桌面小部件是通过AppWidgetProvider来实现的,它本质上是一个广播。 RemoteView能够实现跨进程的更改View。RemoteView在通知栏上的应用 当我们...

2018-07-19 14:04:40 203

原创 Android开发艺术探索笔记(11)

View的工作流程measure过程 measure要分过程来看,如果View是一个原始的View,则通过measure就可以直接完成其测量过程,如果是一个ViewGroup过程,除了去完成自身的measure,还要去遍历调用所有子元素的measure,各个子元素还要去递归完成这一过程。1. View的measure过程 measure是一个final类型的方法。它会调用onMeas...

2018-07-18 20:00:12 284

原创 Android 开发艺术探索笔记(10)

View工作原理ViewRoot和DecorView ViewRoot对应ViewRootImpl类,它是连接WindowManager和DecorView的纽带。View的三大流程均是通过ViewRoot来完成的。在ActivtyThread中,当Activity创建完毕,会将DecorView添加到Window中,同时创建ViewRootImpl对象,并将ViewRootImpl和Dec...

2018-07-16 14:17:18 349 1

原创 Android 开发艺术探索笔记(9)

View的滑动可以通过三种方式实现View的滑动通过View本身提供的scrollTo/scrollBy方法通过动画给View施加平移的效果改变View的LayoutParams使得View重新布局从而实现滑动使用scrollTo/scrollBy,下面为它的源码 可以看出scrollTo是View的绝对滑动,即滑到精确的坐标,而scrollBy是相对滑动,里面调用了sc...

2018-07-15 20:33:14 284

原创 Android 开发艺术探索笔记(8)

Binder连接池 当一个项目很庞大的时候,可能会用到很多的Service和AIDL接口,这会显得很难管理。 这时候我们采用Binder连接池,将所有的AIDL放在一个Service来管理。每个模块只需要创建并实现AIDL及其细节,然后向服务端发送自己的唯一标志。服务端用queryBinder来找到对应的Binder并返回这个对象,当这个模块得到Binder的时候就可以。 步骤是:(假定...

2018-07-14 15:47:05 380

原创 Android 开发艺术探索笔记(7)

使用Socket进行IPC通信Socket又称为套接字,分为流式套接字和用户数据包套接字两种,分别对应网络的传输控制层的TCP和UDP协议。 接下来来设计一个聊天室实现Socket进行IPC通信。用远程Service来建立一个TCP服务,在主界面来连接这个TCP,然后在客户端发消息给服务端,服务端都会随机回复一句话。我们在服务端做一些处理来实现其能和多个客户端同时建立连接并响应。 先要声明...

2018-07-12 18:21:12 288

原创 Android 开发艺术探索笔记(6)

IPC之ContentProviderContentProvider因为是Android提供不同应用间数据共享的方式,所以它天生就适合IPC,ContentProvider的底层实现就是Binder,但它的使用比AIDL简单的多。 系统预置了许多ContentProvider,比如通讯录信息,日程表信息,要跨进程访问只需通过ContentResolver的query、update、inser...

2018-07-10 00:49:17 225

原创 Android 开发艺术探索笔记(5)

Android中的IPC方式<使用Bundle> 四大组件中可以让我们去传递数据(Activity,Service,Receiver),其中bundle就可以附加信息通过Intent传输至远程,里面的存放信息必须是可以序列化和反序列化的,比如基本类型,实现了Serializable接口或者Pacelable接口的以及一些特殊对象。 这里有一个例子,当进程A中有一个计算,计算完了...

2018-07-05 00:03:18 240

原创 Android 开发艺术探索笔记(4)

多进程模式的运行机制这里有个例子,还是Activity A和B,A为主进程,B为设置了process属性的进程,这里创建一个User类,里面定义一个 public static int UserId = 1。 然后在A中去修改UserId = 2并打印,然后B也打印这个值。静态变量应该是大家都可以去修改然后最后打印出来应该一样才对,但这个时候打印的值 A中为2,B中却为1。 原因是Andro...

2018-07-02 15:28:29 332

原创 Andorid 开发艺术探索笔记(3)

IntentFilter的匹配规则<关于隐式调用Activity> 隐式调用Acitvity需要去匹配目标组件的IntentFilter中所有的过滤信息,如果不匹配则无法启动目标Activity。 IntentFilter中有action,category,data三个过滤信息。在Manifest中,一个intent-filter可以声明多个action、category、da...

2018-07-01 15:00:55 204

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除