Android:日常学习笔记(6)——探究活动(3)

活动的生命周期

返回栈

  Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的活动就会重新显现出来。Android是使用任务(Task)来管理活动的一个任务就是一组存放在栈里的活动的集合
  默认情况下,每当我们启动一个新的活动,他会在返回栈中入栈,并处于栈顶位置。而每当我们按下Back或者Finish以后,处于栈顶位置的活动会出栈。

  

活动的状态

  运行状态(栈顶的元素)、暂停状态(不在栈顶但仍然可见,如对话框)、停止状态(不在栈顶并完全不可见,有可能被系统回收)、销毁状态(从返回栈中移除后)。

活动的生存期

☐ onCreate():他会在活动第一次被调用的时候创建。

☐ onStart():活动由不可见变为可见时调用。

☐ onResume():活动准备好与用户进行交互时调用,此时活动一定位于返回栈的栈顶。并处于运行状态。

☐ onPause():在系统准备好去启动或者恢复另一个活动的时候调用,一般在此将一些消耗CPU的资源释放掉。

☐ onStop():这个方法在活动完全不可见的时候调用。

☐ onDestory():这个方法在活动被销毁之前调用。

☐ onRestart():这个方法在活动由停止转变为运行状态之前调用,也即是活动被重新启动了。

体验活动的生命周期

1.我们新建三个活动
  

说明

  对话框活动我们需要在AndroidManifest中进行设置。

  

2.在主活动中设置启动其余活动,且重载生存期方法

package com.example.zy.android2;import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button startNormal = (Button) findViewById(R.id.start_normal_activity);Button startDialog = (Button) findViewById(R.id.start_dialog_activity);startNormal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, NormalActivity.class);startActivity(intent);}});startDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, DialogActivity.class);startActivity(intent);}});}protected void onStart(){super.onStart();Log.d("Main","onStart");}protected void onResume(){super.onResume();Log.d("Main","onResume");}protected void onPause(){super.onPause();;Log.d("Main","onPause");}protected void onStop(){super.onStop();Log.d("Main","onStop");}protected void onDestroy(){super.onDestroy();Log.d("Main","onDestroy");}protected void onRestart(){super.onRestart();Log.d("Main","onRestart");}}

3.运行程序

我们发现:
当首次运行程序时会打印
  03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onCreate
  03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onStart
  03-19 14:36:27.872 3632-3632/com.example.zy.android2 D/Main: onResume
点击第一个按钮会打印:
  03-19 14:37:20.270 3632-3632/com.example.zy.android2 D/Main: onPause
  03-19 14:37:20.733 3632-3632/com.example.zy.android2 D/Main: onStop
  说明:由于NormalActivity活动会完全遮挡Main活动,所以这两个方法完全执行。
返回后打印:
  03-19 14:38:11.040 3632-3632/com.example.zy.android2 D/Main: onRestart
  03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onStart
  03-19 14:38:11.041 3632-3632/com.example.zy.android2 D/Main: onResume
  说明:由于之前Main活动进入停止状态,所以onRestart()方法会得到执行,之后又会依次调用onStart()和onResume()。
点击第二个按钮
  03-19 14:39:17.338 3632-3632/com.example.zy.android2 D/Main: onPause
  说明:没有执行onStop,是因为Dialog没有完全遮挡住MainActivity,此时MainActivity只是进入了暂停状态,并没有停止状态。
返回后打印
  03-19 14:39:21.519 3632-3632/com.example.zy.android2 D/Main: onResume
退出MainActivity
  03-19 14:39:49.763 3632-3632/com.example.zy.android2 D/Main: onPause
  03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onStop
  03-19 14:39:49.772 3632-3632/com.example.zy.android2 D/Main: onDestroy

活动被回收了怎么办

   当活动A基础上启动了活动B,那么A进入停止状态,就有可能被系统回收。如果活动A中我们输入了临时数据,那么当从活动B返回时,由于重新执行了onCreate()方法,数据将得不到保存。
  Activity提供了一个onSaveInstanceState()回调方法,这个方法可以保证数据回收之前一定被调用,因此我们可以利用这个方法来解决互动被回收时临时数据得不到保存的问题。

//活动重新创建时,可以判断是否有Bundle留下来
protected void onCreate(Bundle savedInstanceState) {if(savedInstanceState!=null)Log.d("Main",savedInstanceState.getString("data_key"));
}
//这个方法在活动被系统回收前一定会被调用
protected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);String tempData = "Something you just typed";outState.putString("data_key",tempData);}

转载于:https://www.cnblogs.com/MrSaver/p/6580655.html

Android:日常学习笔记(6)——探究活动(3)相关推荐

  1. Android:日常学习笔记(8)———探究UI开发(2)

    Android:日常学习笔记(8)---探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

  2. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)---探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  3. Android Studio --- [学习笔记]RadioButton、CheckBox、ImageView、ListView、TCP的三次握手

    说明 源代码 在2.x里有TCP的三次挥手与四次握手,先对它进行简单的回答(百度).预计在下一篇里,会继续说明TCP 接上一篇: Android Studio - > [学习笔记]Button. ...

  4. 疯狂Android讲义 - 学习笔记(二)

    疯狂Android讲义 - 学习笔记(二) Android应用的用户界面编程 2.1 界面编程与视图(View)组件 Android应用的绝大部分UI组件放在android.widget.androi ...

  5. Android 开发学习笔记

    Android 开发学习笔记 Lesson1 (2.28) android之父: Andy Rubin(安迪 鲁宾) Lesson2 (3.3) android 的优点: 开放.网络接入自由.丰富的硬 ...

  6. java/android 设计模式学习笔记(1)--- 单例模式

    前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...

  7. Android Binder 学习笔记

    前言: Binder是Android给我们提供的一种跨进程通信方式.理解Binder能帮助我们更好的理解Android的系统设计,比如说四大组件,AMS,WMS等系统服务的底层通信机制就都是基于Bin ...

  8. Android Studio --- [学习笔记]TCP(第2弹)、GridView、ScrollView

    说明 这篇主要接上一篇Android Studio - > [学习笔记]RadioButton.CheckBox.ImageView.ListView.TCP的三次握手 对上面回答的细解,并用J ...

  9. Android动画学习笔记

    Android实战经验之图像处理及特效处理的集锦 https://www.oschina.net/question/231733_44154 Android动画学习笔记 3.0以前,android支持 ...

最新文章

  1. 如何让渣画质图片达到逼真效果,试试GAN吧
  2. 系统间通信——dubbo
  3. 团队作业——随堂小测(同学录)
  4. atlas mysql 数据库同步_atlas+mysql实现主从复制和读写分离(二)
  5. android 之自定义适配器(重写的getView()方法中convertView元素的妙用)一个实例
  6. 【小练习01】CSS--PS提示框制作
  7. hdu-3033-I love sneakers!--背包
  8. SaltStack 学习笔记 - 第六篇: 详解Pillar
  9. 选购光纤交换机时需要注意光模块的哪些配置?
  10. 跨域请求解决方法(JSONP, CORS)
  11. rp文件chrome浏览器查看插件
  12. python脚本自动填调查问卷
  13. python海龟怎样写字又快又好看_python海龟画图
  14. jquery.uploadify php,jQuery上传插件Uploadify的使用方法
  15. 【转】优秀的JavaScript模块是怎样炼成的
  16. 使用keil软件创建一个STM32工程
  17. 【Pytorch】tensor类型数据.squeeze()和.unsqueeze()函数的简明教程(一看就会)
  18. PreCreateWindow作用
  19. 【重要】一文带你读懂什么是docker
  20. 计算机各分数段人数,Excel中求优分率、及格率及各分数段人数.doc

热门文章

  1. Shell(7)——case
  2. 从前序与中序遍历序列构造二叉树—leetcode105
  3. 编译FileMon出错
  4. HDU - 6661 Acesrc and String Theory (后缀数组)
  5. mysql 取 浮点运算_mysql 浮点型运算误差原因分析及解决方法
  6. aix系统服务器限制ftp访问,AIX 限制ftp用户只能访问其主目录
  7. QuickFIX/N入门
  8. Restlet入门示例
  9. 债券指数(Bond Index)
  10. SAML简介:安全地共享数字身份信息