1、四大组件是什么?
1)Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。一个Activity 通常是一个单独的屏幕,Activity 通过 Intent 来进行通信。Android 中会维持一个Activity Stack,当一个新 Activity 创建时,它就会放到栈顶,这个 Activity 就处于运行状态。
2)Service:服务,运行在手机后台,适合执行不需和用户交互且还需长期运行的任务。
3)ContentProvider:内容提供者,使一个应用程序的指定数据集提供给其他应用程序,其他应用可通过 ContentResolver 类从该内容提供者中获取或存入数据。它提供了一种跨进程数据共享的方式,当数据被修改后,ContentResolver 接口的 notifyChange 函数通知那些注册监控特定 URI 的 ContentObserver 对象。
如果 ContentProvider 和调用者在同一进程中,ContentProvider 的方法(query/insert/update/delete 等)和调用者在同一线程中;
如果ContentProvider 和调用者不在
同一进程,ContentProvider 方法会运行在它自身进程的一个 Binder 线程中。
4)Broadcast Receiver: 广播接收者,运用在应用程序间传输信息,可以使用广播接收器来让应用对一个外部事件做出响应。
2、四大组件的生命周期和简单用法
1)Activity:
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()
-
onCreate():为 Activity 设置布局,此时界面还不可见;
-
onStart(): Activity 可见但还不能与用户交互,不能获得焦点
-
onRestart():重新启动 Activity 时被回调
-
onResume(): Activity 可见且可与用户进行交互
onPause(): 当前 Activity 暂停,不可与用户交互,但还可见。在新
Activity 启动前被系统调
用保存现有的 Activity 中的持久数据、停止动画等。
-
onStop(): 当 Activity 被新的 Activity 覆盖不可见时被系统调用
-
onDestory(): 当 Activity 被系统销毁杀掉或是由于内存不足时调用
2)Service
a) onBind 方式绑定的:
onCreate->onBind->onUnBind->onDestory(不管调用 bindService 几次,onCreate 只会调用一次,onStart 不会被调用。
建立连接后,service 会一直运行,直到调用 unBindService 或是之前调用的 bindService 的 Context 不存在了,系统会自动停止Service,对应的 onDestory 会被调用)
b) startService 启动的:
onCreate->onStartCommand->onDestory(start 多次,onCreate 只会被调用一次,onStart 会调用多次,该 service 会在后台运行,直至被调用 stopService 或是stopSelf)
c) 又被启动又被绑定的服务
不管如何调用 onCreate()只被调用一次,startService 调用多少次,onStart 就会被调用多少次,而 unbindService 不会停止服务,必须调用 stopService或是 stopSelf 来停止服务。
必须 unbindService 和 stopService(stopSelf)同时都调用了才会停
止服务。
3)BroadcastReceiver
a) 动态注册:存活周期是在 Context.registerReceiver 和 Context.unregisterReceiver 之间,BroadcastReceiver 每次收到广播都是使用注册传入的对象处理的。
**b) 静态注册:进程在的情况下,receiver 会正常收到广播,调用 onReceive 方法;生命周期只存活在 onReceive 函数中,此方法结束,BroadcastReceiver 就销毁了。onReceive()只有十几秒存活时间,在 onReceive()内操作超过 10S,就会报 ANR。
进程不存在的情况,广播相应的进程会被拉,Application.onCreate 会被调用,再调用onReceive。
<