Activity总结

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文件中声明

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基础知识就这么多,如果有不足 欢迎指出

你可能感兴趣的:(Activity总结)