四大组件:
Activity
UI操作、页面跳转等
生命周期
onCreate()
执行各种初始化操作
onStart()
onResume()
Activity可见,此时Activity位于栈顶,并且处于运行状态。
onPause()
释放cpu资源,保存关键数据等
onStop()
如果是对话框式的Activity,则onPause会走,onStop不会走
onDestroy()
执行各种释放内存操作。
onRestart()
构成
PhoneWindow->DecorView->DefaultLayout->ViewGroup->用户的xml布局
四种启动模式
standard
每次都重新创建
不断启动A
栈:A->AA->AAA
singleTop
如果在栈顶就不重新创建
不断启动A
栈:
1:A->A->A
2:AB->ABA->ABA
singleTask
栈中只能有一个该Activity实例,如果有该实例,则干掉他上面的,展示他
不断启动A:
栈:
1:A->A->A
2:B->BA->BA
3:ABC->A->A
singleInstance
整个系统中,只能有一个该Activity实例。
Service
后台耗时操作等,主要处理不需要和用户交互的行为或者需要长期驻扎在后台的行为。
默认不运行在子线程, 因此不要在Service中做耗时操作(子线程除外)
生命周期
onCreate()
只在第一次调用startService的时候走
onStartCommand()
每次startService都走,但是只有一个实例。stop一次就终止这个服务了。
onDestroy
IntentService
适合执行一些短期的耗时任务。执行完内容后就自我销毁。重写onHandleIntent方法即可,本身就在子线程中进行。
前台Service
Service默认在后台,在系统内存不足时会自动被回收。但是前台Service不会,并且可以在通知栏显示前台的服务。
AIDL
比较复杂,下次单独拎出来详细拓展一下。
ContentProvider
存储、共享数据等。是对SQLiteOpenHelper的二次封装,通过Uri的映射来获取数据。
Broadcast
组件、应用间通信等。
普通广播
完全异步的,但是所有的接收器接收顺序不一定,并且接受者的处理结果不能继续传递。并且广播发出后无法终止。
有序广播
接收器可以设置优先级,数值越大越优先,可以传递结果给下层,可以终止广播。
本地广播
只限于本应用内的广播接收器接收。保证安全,其他和普通广播基本一致。
Sticky广播
只保留最后一条广播,并且每当有匹配的接收器注册时,就发送。