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

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

前言

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

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

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

Activity

  • Activity的生命周期:

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

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

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

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

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

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

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

  • Activity的结构

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

  • Activity的4种启动模式

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

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

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

    4. 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

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

你可能感兴趣的:(《Android开发进阶,从小工到专家》笔记)