Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满屏幕也可以小于屏幕并浮动在其他窗口之上。
一.activity生命周期
1.activity的四种状态
running:活动状态,点击屏幕会相应
paused:失去焦点或被非全屏activity占据,或被透明的activity放置在栈顶。但只是失去了和用户交互的能力,并不是说activity被销毁了。若内存紧张,则被回收。
stopped:这个activity被另一个activity完全覆盖的时候,不可见,在后台运行。内存若不紧张 ,则内存状态信息,成员变量还在。
killed:activity被系统回收了。
2.activity生命周期
activity启动->onCreate()创建,数据加载等->onStart()正在启动,用户可见,不能交互->onResume()在前台可见及交互
点击Home键回到主界面(Activity不可见)->onPause()->onStop()
当我们再次回到原activity时->onRestart()->onStart()->onResume()
退出当前activity时->onPause()->onStop()->onDestroy()生命周期最后一个方法,回收工作及资源释放等。
3.android进程优先级
前台:与用户交互的activity或与前台绑定的service
可见:可见但不能点击
服务:后台service服务
后台:比如前台进程按了Home键
空:缓存目的保留
二.Android任务栈
如果应用不存在任务(应用最近未曾使用),则会创建一个新任务,并且该应用的“主”Activity 将作为堆栈中的根 Activity 打开。
当前 Activity 启动另一个 Activity 时,该新 Activity 会被推送到堆栈顶部,成为焦点所在。 前一个 Activity 仍保留在堆栈中,但是处于停止状态。Activity 停止时,系统会保持其用户界面的当前状态。 用户按“返回”按钮时,当前 Activity 会从堆栈顶部弹出(Activity 被销毁),而前一个 Activity 恢复执行(恢复其 UI 的前一状态)。 堆栈中的 Activity 永远不会重新排列,仅推入和弹出堆栈:由当前 Activity 启动时推入堆栈;用户使用“返回”按钮退出时弹出堆栈。 因此,返回栈以“后进先出”对象结构运行。
三.activity启动模式
1.standard:每次启动都会重新创建activity实例,并加到任务栈(task)中,不会考虑之前是否存在,不会复用。消耗内存资源
2.singletop:(栈顶复用)若在栈顶,则不重新创建
3.singletask:(栈内复用模式)看整个任务栈中是否存在当前需要启动的activity,若存在,则直接将activity置与栈顶。这个以上的activity就都移除了,销毁。
4.singleinstance:activity在系统中有并只有一个实例,activity独享任务栈。较少用。
四.scheme跳转协议
- 服务器可以定制化跳转app页面
- app可以通过Scheme跳转到另一个app页面
- 可以通过h5页面跳转app原生页面
协议格式
Uri.parse("qh://test:8080/goods?goodsId=8897&name=fuck")1
qh代表Scheme协议名称
test代表Scheme作用的地址域
8080代表改路径的端口号
/goods代表的是指定页面(路径)
goodsId和name代表传递的两个参数
Scheme使用
定义一个Scheme
<activity android:name=".SchemeActivity">
<!-- 给页面添加指定的过滤器-->
<intent-filter>
<!--该页面的路径配置-->
<data
android:host="test"
android:path="/goods"
android:port="8080"
android:scheme="qh"/>
<!--下面这几行也必须得设置-->
<category android:name="android.intent.category.DEFAULT"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
</activity>