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 { @Override
protected 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() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, NormalActivity.class);
startActivity(intent);
}
});
startDialog.setOnClickListener(new View.OnClickListener() {
@Override
public 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);
}

Android:日常学习笔记(6)——探究活动(3)的更多相关文章

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

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  2. Android:日常学习笔记(5)——探究活动(2)

    Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...

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

    Android:日常学习笔记(4)——探究活动 什么是活动: 活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互. 手动创建活动 创建空活动 1.新建活动时选择Add ...

  4. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

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

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  6. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

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

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

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

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

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

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

随机推荐

  1. 李洪强iOS开发之基于彻底解耦合的实验性iOS架构

    基于彻底解耦合的实验性iOS架构   这周我决定做一个关于彻底解耦合的应用架构的实验.我想探究的主题是: “如果所有的应用内通讯都通过一个事件流来完成会怎么样?” 我构造了一个待办事项应用,因为这是我 ...

  2. phxsql安装小记

    PhxSQL具有服务高可用.数据强一致.高性能.运维简单.和MySQL完全兼容的特点. 服务高可用:PhxSQL集群内只要多数派节点存活就能正常提供服务:出于性能的考虑,集群会选举出一个Master节 ...

  3. Vue 组件5 高级异步组件

    自2.3.0起,异步组件的工厂函数也可以返回一个如下的对象. const AsyncComp = () => ({ // 需要加载的组件. 应当是一个 Promise component: im ...

  4. neocomplcache 自动补全

    key description ctrl+n 当前词补全项,下一个 ctrl+p 当前词补全项,上一个 :help NERDTree NERDTree帮助手册

  5. 基于springCloud的分布式架构体系

    Spring Cloud作为一套微服务治理的框架,几乎考虑到了微服务治理的方方面面,之前也写过一些关于Spring Cloud文章,主要偏重各组件的使用,本次分享主要解答这两个问题:Spring Cl ...

  6. Python 爬虫实战5 模拟登录淘宝并获取所有订单

    经过多次尝试,模拟登录淘宝终于成功了,实在是不容易,淘宝的登录加密和验证太复杂了,煞费苦心,在此写出来和大家一起分享,希望大家支持. 本篇内容 python模拟登录淘宝网页 获取登录用户的所有订单详情 ...

  7. redhat6.5安装ntfs-3g rpm来支持ntfs文件系统挂载

    linux安装ntfs-3g模块来支持ntfs文件系统挂载 所需包 fuse-2.9.3.tar.gz ntfs-3g_ntfsprogs-2011.4.12.tgz step1. 解压fuse-2. ...

  8. weblogic 8.1教程之部署(三)

    在 weblogic 都配置好了之后.就能够部署项目了. 部署项目的时候,能够大体分为两个步骤: 1,创建缓冲池: 2,配置数据源. 先启动 weblogicserver.进入weblogic 的主页 ...

  9. 杂项收集,包括-发邮件、二维码生成、文件下载、压缩、导出excel

    本篇就最近工作解决的问题做个代码收集.包括以下几个方面:发邮件.二维码生成.文件下载.压缩.导出excel.有一种可用的解决方法就好,不求全面,不求原理. 1.发邮件: 命名空间:System.Net ...

  10. caffe使用自己的数据做分类

    这里只举一个例子: Alexnet网络训练自己数据的过程 用AlexNet跑自己的数据 参考1:http://blog.csdn.net/gybheroin/article/details/54095 ...