1、Android四大组件:Activity , Service, BroadCaseReceiver , ContentProvider

2、详细介绍四大组件

(1)Activity :

 作用:Android程序与用户交互的窗口、一个Activity通常是一个单独的屏幕,上面可以显示不同的控件。

生命周期:onCreate---->onStart---->onResume---->onPause---->onStop---->onDestrop

是否可以开启多进程:可以。在AndroidManifest中给Activity配置android:process属性。

示例:

<activity
    android:name=".ui.activity.ChatSettingActivity"
    android:screenOrientation="portrait" />
<activity
    android:name=".ui.activity.NoticeOfficialActivity"
    android:process="com.shougang.shiftassistant1"
    android:screenOrientation="portrait" />
<activity

上面图一就是正常的activity,图二就是多进程的形式。这意味着当前应用进程是com.shougang.shiftassistant时,又新增了一个进程,进程名是com.shougang.shiftassistant1

(2)Service 服务

作用:一个长期运行在后台,不与用户产生UI交互的程序,可以用户执行网络请求,播放音乐,执行文件读写操作等。

启动形式:startService(一直运行在后台,即使启动service的组件已被销毁)

                bindService(有组件与其绑定时才会运行)

生命周期:startService: onCreate----->onStartCommand----->onStop-------->onDestrop

                 bindService: onCreate----->onBind----->onUnbind------->onDestroy

是否可以开启多进程:可以。在AndroidManifest中给Activity配置android:process属性

(3)BroadCaseReceiver  广播接收者

作用:没有用户界面,它可以启动一个activity或service来启动它们收到的消息

广播类型:普通广播: 通过context.sendBroadCast(Intent  intent)发送消息

                 有序广播:通过context.sendOrderedBroadCast(intent , receiverPermission)发送消息

                 异步广播:通过context.sendStickyBroadcast(Intent myIntent)发送的

注意:生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) 程序无响应的错误信息,如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成 . 这里不能使用子线程来解决 , 因为 BroadcastReceiver 的生命周期很短 , 子线程可能还没有结束BroadcastReceiver 就先结束了。

是否可以开启多进程:可以。在AndroidManifest中给Activity配置android:process属性

(4)ContentProvider  内容提供者

作用:为应用程序之间实现数据共享,实现统一接口。使用表的形式来对数据进行封装。

方法:1、 public boolean  onCreate():该方法在ContentProvider 创建后就会被调用,Android开机后,ContentProvider在其它应用第一次访问它时才会被创建。 
2、 public  int  insert():该方法用于宫外部应用为ContentProvider中添加数据使用。 
3、 public  int  delete(Uri  uri,  String  selection,  String[]  selectionArgs):该方法用于供外部应用从ContentProvider中删除数据。 
4、 public  int update(Uri  uri,  ContentValues  values,  String  selection,  String[]selectionArgs):该方法用于供外部应用更新ContentProvider中的数据。 
5、 public  cursor query(Uri  uri,  String[]  projection,  String  selection,  String[]selectionArgs, String sortOrder):该方法用于供外部应用查询ContentProvider中的数据。 

Uri详解:外界可以通过ContentResolver接口来访问ContentProvider(内容提供者)中的数据。但是在详细了解ContentResolver之前先理解Uri。Uri 通用资源标志符(Universal Resource Identifier)Uri代表要操作的数据,Android中可用的每种资源 - 图像、视频片段等都可以用Uri来表示。

是否可以开启多进程:可以。在AndroidManifest中给Activity配置android:process属性