1. 概念

说明:

1). 创建和销毁 onCreate 和 onDestory

应用场景:当界面销毁的时候存储一些数据,在onCreate创建的时候回显数据;

例如:发短信:写短信写到一半,按home键退出不发送(这个时候进入onDestory,保存未发送的短信),然后再进入短信(在onCreate中把之前保存的信息读取出来),就可以看到未发送的短信显示出来

2). 可见和不可见 onStart 和 onStop

注意:如果一个界面被最小化了,那么是不会调用onDestory方法的。仅仅是调用了onStop方法

应用场景:当界面不可见的时候,进入onStop,当界面可见的时候,进入onStart

例如:正在看视频,这个时候来了一个电话,视频被打断(这个时候进入onStop,用来暂停视频播放),挂断电话,视频界面重新回来了(这个时候进入onStart,再次启动视频播放),继续视频播放。

3). 获取焦点和失去焦点 onResume 和 onPause

注意, 如果一个界面还能看得见,但是失去了焦点,那么它的生命周期只会调用onPause.不会调用onStop

应用场景 : 一般用作游戏的暂停,在游戏的界面上覆盖住一个透明的界面,那下面的界面能看到,但是不可交互。

生命周期的总结

完整的生命周期

onCreate--onStart--- onResume---onPause--onStop---onDestory

可视生命周期

onStart--onResume--onPause--onStop

前台生命周期

onResume--onPause

2. 代码

public class MainActivity extends AppCompatActivity {

    //创建:无界面
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("onCreate");
} //开始有界面了
@Override
protected void onStart() {
super.onStart();
System.out.println("onStart");
} //获得焦点了
@Override
protected void onResume() {
super.onResume();
System.out.println("onResume");
} //失去焦点
@Override
protected void onPause() {
super.onPause();
System.out.println("onPause");
} //界面消失
@Override
protected void onStop() {
super.onStop();
System.out.println("onStop");
} //完结
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("onDestroy");
}
}

现象:

点击进入时:

3. 四种启动模式

一般我们就使用默认的,最多再使用单一顶部模式;

1. standard -标准模式,默认的启动模式
只要这个界面被启动多少次就会产生多少个实例被压到栈里面。

2. singleTop- 单一顶部模式

如果哪一个activity设置了这种模式,但凡它位于栈顶,也就是显示在屏幕上给用户,如果还想启动它,是不会再创建新的实例了。还是使用栈顶的这个实例。

应用场景:为了避免自己启动自己,出现一些奇怪的现象。---短信编写界面

3. singleTask---单一任务模式

如果哪一个activity设置了这种启动模式,假设以前已经在栈中存在过实例,那么接下来将不会再次创建它的实例,而是把以前的实例直接移动到栈顶显示,并且把它与栈顶之间的实例全部销毁。

应用场景:如果哪一个界面非常的消耗内存和CPU,一般做成singleTask启动模式 :浏览器界面

4. singleInstance ---全局唯一模式(单例模式)

如果哪一个activity设置了这种启动模式,那么它创建出来的实例会单独存放在一个栈中,并且这个栈有且只能有它自己一个实例对象,如果以后还要启动这个activity,那么要做的仅仅是交替显示不同的栈而已。

4. 横竖屏切换

1. 直接硬编码当前界面显示的是横屏还是竖屏

android:screenOrientation="portrait/landscape"

2.  根据手机方向不同而显示不同的画面

android:configChanges="keyboardHidden|screenSize|orientation"

最新文章

  1. 部署Eclipse中的Web项目到Tomcat服务器运行
  2. 我认为测试应该掌握的SQL语句
  3. appserv在哪修改服务器名
  4. 【转】Android平台下利用zxing实现二维码开发
  5. DOCKER内部安装指南
  6. pixel像素与物理像素
  7. JQuery Ajax使用及注意事项
  8. centos7 把终端显示改为英文/中文
  9. JS-构造函数模式代码实战和总结-极客
  10. 【Python】Xml To Excel
  11. Mysql跨表更新
  12. Django TemplateDoesNotExist
  13. js模拟链表---双向链表
  14. html5获取地理位置信息API
  15. 用过的sql 工具
  16. Filezilla开源FTP传输工具
  17. 【很重要】优秀的常用的js库
  18. C++primer习题--第4章
  19. Object-C 多线程中锁的使用-NSLock
  20. 如何让MVC和多层架构和谐并存(一)

热门文章

  1. django drf CreateModelMixin和Serializer.validate_columun
  2. 限制html文本框input只能输入数字和小数点
  3. phonegap3.0+HTMLl5 开发 ipad app 总结
  4. Docker 网络模式和跨主机通信
  5. Javascript实例 -- 计时器, 搜索框,selected联动
  6. web负载均衡【总结归纳所有看过的资料的理论】
  7. php中的XML DOM(10)
  8. 【OCP题库-12c】最新CUUG OCP 071考试题库(72题)
  9. “全栈2019”Java异常第八章:throw关键字详解
  10. day 09 课后作业