第1章 Android的构成基石-四大组件

2017-01-14 10:04:42来源:http://www.jianshu.com/p/8c8e9f71b71e作者:panyz人点击

此文在我的个人网站,我的简书,我的CSDN博客
同时发布,请多多关注!


前言

这是我在读《Android开发进阶 从小工到专家》所摘抄的笔记。需知更多详情,请阅读原着。


Android四大组件:Activity,Service,ContentProvider和Broadcast。


Activity负责UI元素的加载与页面之间的跳转,代表了一个页面单元。Service负责与UI元素无关的工作,如在后台执行耗时的操作等。ContentProvider负责存储、共享数据,使得数据可以在多个应用之间共享。Broadcast则是在各个组件、页面之间进行通信,简化了Android开发中的通信问题。


Activity

Activity的生命周期:



onCreate():会在Activity第一次创建时被调用,通常会在这个函数中完成Activity的初始化操作,如设置布局,初始化视图,绑定事件等。



onStart():在onCreate()函数调用之后被调用,此时的Activity还处在不可见的状态,他的下一个状态就是Activity变得可见的时候,也就是这个函数在Activity在可见之前被调用。



onResume():在Activity变得可见的时候调用,此时的Activity一定位于返回栈的栈顶位置,并处于运行状态。



onPause():在系统准备去启动或者恢复另一个Activity的时候调用,也就是在Activity即将从可见状态变为不可见时,通常会在这个函数中将一些消耗CPU的资源释放掉,以及保存一些关键数据。



onStop():在Activity完全不可见时调用,它和onPause()函数的主要区别在于,如果新启动的Activity是一个对话框式的Activity,那么onPause()函数就会得到执行,而onStop()函数并不会执行。



onDestroy():在Activity被销毁之前调用。



onRestart():在Activity由停止状态重新变为运行状态之前调用,也就是Activity被重新启动。




Activity的结构



Activity -> PhoneWindow -> DecorView -> DefaultLayout -> mContentParent(用户自己的xml布局)



Activity的4种启动模式



standard(标准启动模式)在这种模式下启动的Activity可以被多次实例化,即在同一个任务栈中可以存在多个Activity实例。



singleTop 如果Activity的实例已经在任务栈的栈顶,那么再启动这个Activity的时候,不会再创建新的实例,而是重用位于栈顶的那个实例。



singleTask 在一个任务栈中只能有一个该Activity的实例,如果已经存在Activity,系统会销毁处在改Activity之上的所有Activity,最终让改Activity实例处于栈顶。



singleInstance 设置了改模式的Activity会在一个独立的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说改实例启动的其他Activity会自动运行在另一个任务中。当再次启动该Activity实例时,会重用已存在的任务和实例。




Service与AIDL

service默认并不会在子线程中运行,也不会运行在一个独立的进程中,同在执行在UI线程中,因此不要在Service中执行耗时的操作。


普通Service

Service的生命周期: onCreate()、onStartCommand()、onDestory()


IntentService

IntentService将用户的请求执行在一个子线程中,用户只需要覆写onHanddleIntent函数,并且在该函数中完成自己的耗时操作即可。需要注意的是,在任务执行完毕之后IntentService会调用stopSelf自我销毁,因此,它适用于一些短期的耗时操作。


AIDL

AIDL(Android接口描述语言)是一个接口描述语言,通常用于进程之间的通信。


Broadcast

广播机制最大的特点就是发送方并不关心接收方是否接到数据,也不关心接到方如何处理数据,通过这样的形式达到接收方和发送方之间的完全解耦。


普通广播

普通广播完全是异步的,通过context的sendBroadcast()函数发送。效率高,但顺序不确定。缺点:接收者不能处理结果传递到下一个接收者,并且无法终止广播,直到没有与之匹配的广播接收器为止。


有序广播

有序广播通过context.sendOrderedBroadcast()来发送的。按照广播接收器的优先级依次执行。


本地广播

LocalBroadcastManager.getInstance(context).XXX();


sticky广播
ContentProvider

书中作者用一个案例去对其讲解,代码篇幅较长,有兴趣可以自行阅读原着。




最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台