1.activity
四种转台:
running:处于activity栈顶的状态
pause:失去焦点,失去和用户交互能力,但是可见
stopped:被另一个覆盖activity完全覆盖,不可见
killed:被销毁状态
生命周期:
启动时:oncreat-onstart(用户可见,不可交互)-onresume(前台可见)
点击home键返回:onpause-onstop
再次回到app:onrestart(由不可见状态到可见状态)-onstart-onresume
退出activity:onpasuse-onstop-ondestory
进程优先级:前台进程(用户正在交互的activity)》可见进程(可见 不在前台)》服务进程》后 台进程》空进程
任务栈(task)
一个task包含 一个activity集合;一个activity中可能不只一个task
启动模式
standard:每次启动一个activity ,就重新启动一个activity实例,加载到task中,不判定是否重复,每次创建一个activity都会重新完全走一遍声明周期;
singletop:栈顶复用,判断task中栈顶有没有,有的话 复用,没有 就新创建。
singletask:栈内复用,检测整个任务栈中 是否有activity, 若检测到,则将那个activity放到栈顶,将其他的全部移除。
singleintance:activity独享任务栈。整个任务栈中有且只有一个实例。
scheme跳转协议
页面内的跳转实例,在app中内部跳转到各页面。应用场景:根据服务的下发的url,跳转到指定页面。
2.fragement
fragement加载方式:
1.静态加载
2.动态加载
https://www.jianshu.com/p/dfdb838012c3
fragementpageradapter 和fragementstatepageradapter区别:前者适用于页面较少的情况,后者用于页面较多的情况。在fragementstatepageradapter中 释放了内存。
fragement 声明周期,必须加载到avtivity才能使用
启动-展现”onattach(fragement与activity关联之后)-oncreate(只是创建了fragement,activity没有创建完)-oncreateview(首次绘制界面调用)-onviewcreate(fragement界面已经被绘制好了)-oncreate(activity)-onactivitycreated()-onstart(activity)-onstart()-onresume(activity)-onresume()
回退:onpause()-onpause(activity)-onstop()-onstop(activity)-ondestoryview()-ondestory()-ondetech()-ondestory(activity)
fragement 通信
1.在fragement中调用activity中的方法:getactivity
2.在activity中调用fragement中的方法:接口回调
3.在fragement中调用fragement中的方法:先getactivity-然后再获取另一个findfragementbyid
fragement的方法:replace 替换fragement实例,add 把fragement实例加到activity的上层,remove 从activity中删除fragement实例
service:
应用场景:和boardcast一样都运行在主线程中,都不能做耗时操作。
service和thread区别:service运行在主线程上。activity难以控制后台thread。
开启service的方式:
startservice: 一旦启动,服务就在后台无限制运行,即使activity销毁,service仍然运行,直到手动销毁。
bindservice:绑定service和activity一起。绑定取消后,service自动被销毁,不需要手动销毁。
service保活;
broadcast:
应用场景:
同一个app具有多个进程的不同组件之间的消息通信
不同app的组件之间的通信
广播总类:
1.normal broadcast:context.sendbroadcast
2.system broadcast:context.sendorderedbroadcast
3.local broadcast:只在自身app内传播
广播实现- receive
1.静态注册 注册完成就一直运行
2.动态注册 跟随activity的生命周期
内部实现机制:
1.自定义广播接收者broadcastreceiver,并复写 onrecvice()方法;
2.通过binder机制向 AMS进行注册
3.广播发送者通过binder机制向AMS发送广播
4.AMS查找符合相应条件的broadcastreceiver,将广播发送到相应的队列
5.详细循环执行拿到此广播,回调broadcastreceiver中的onreceiver方法
localbroadcastmanager:只在自身app内传播
binder:
handler: