activity声明周期
oncreate->onStart->(onReStart)->onResume->onPause->onStop->onDestory()```
> onstart 开始activity已经在前台,但是还是不可见,onResume表示已经开始可见状态(对应着可见进程)
onPause() 对应着后台进程
#activity 加载模式
- standard 默认的加载模式:
> 每当startActivity 直接往栈顶添加新的activity 声明周期显示之前的AonPause然后是新的`activity` onCreate->onStart->onResume->旧的`activity`onStop
- singleTop
> 栈顶单一加载模式 当activity A设置成该模式后, A位于栈顶后,如果在启动新的A,A的生命周期onPause->onNewIntent->onResume
如果A不在栈顶,那么就和standard模式一样
- singleTask
> 如果位于栈顶 则onPause->onIntent->onResume 如果位于栈底,则吧上面所有的activity都pop出战,自己则是调用onNewIntent -onRestart->onStart->onResume(自己被唤起)
- singleInstance 会打开一个新的task并把该activity放进去
# activity异常关闭恢复
`activity`会把当前页面中所有拥有`id`的`view`的状态保存起来,但是activity中开发者声明的变量并不会保存,用户可以在`onSaveInstance`方法中保存必要的参数,`activity`重建后会在`onCreate(Bundle savedInstanceState)`的`savedInstanceState`中存放,但是这个并不推荐,因为第一次启动activity的savedInstanceState是null,官方推荐在`onRestoreInstanceState(Bundle savedInstanceState) `方法中恢复数据
#activity隐式启动(应用内,网页端)
- 应用内隐式启动Activity:A
对于A的要求 在manifest文件中 A要声明`category`和`action` 这个是必须的,然后在intnent启动时需标明action,**默认的category可以不标明**,`intent`会自动添加,对于action匹配规则,action 可以声明多个,但是必须要有一个可以匹配成功,category则一但在manifest文件中声明,则必须一一对应(这么记,维生素c,所以category要一一对应)
对于intent隐式启动,安全起见,需要先验证一下这个intent是否能找到`intent.resolveActivity(getPackageManager());`只有不为`null`那么可以安全启动
网页内启动(Scheme规则)
在manifest文件中声明
<data
android:host=""
android:mimeType=""
android:path=""
android:scheme=""
android:pathPattern=""
android:pathPrefix=""
android:port=""
android:ssp=""
android:sspPattern=""
android:sspPrefix=""/>
> 一般只需要设置scheme和host即可 scheme 就是http这种,host就是www.google.com
##总结
个人感觉activity基础知识就这么多,如果有不足 欢迎指出
网友评论