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. char device

    /** * alloc_chrdev_region() - register a range of char device numbers * @dev: output parameter for f ...

  2. linux undefined reference to symbol 'floor@@GLIBC_2.2.5'

    这个是因为GNU make版本不一致导致,最后加上-lm g++或者gcc -o  main main.c -lm 如果还存在问题 需要加上-Wl,--no-as-needed g++或者gcc -W ...

  3. Android 四大组件学习之Service六

    上几节.我们学习怎样用StartServer启动一个服务,用bindServer去绑定一个服务.以及服务的生命周期,以及什么是IntentService. 也许有读者会发现,我们BindServer中 ...

  4. 如何使用qperf来衡量网络带宽和延迟性能?

    解析度 安装 qperf从RHEL服务器通道安装: 生的 # yum install qperf 检查带宽 服务器 让一个系统监听服务器: 生的 server # qperf 服务器默认在TCP端口1 ...

  5. 嵌入式开发之davinci--- 8148/8168/8127 中swms、Mosaic’s、display 显示pal 模式

    (1) (2) (3) (4) -------------------------author:pkf ------------------------------time:2-3 --------- ...

  6. flex datagrid itemrender wordwrap失效

    现在我是想把datagrid中的部分字体变个颜色. 但是重写set data函数后发现原先的wordwrap自动换行不好使了. 于是就在谷歌上找问题.. 参考了两篇: http://stackover ...

  7. RAC中数据文件创建到了本地路径(非系统表空间) 使用rman转移

    环境: 11.2.0.1 + RHEL5.8 參考文档ID:1678747.1 1.模拟创建 一节点: SQL> create tablespace tdb datafile '/u02/app ...

  8. 一个智障安装了一天的python和graphlab的血泪史

    大概的过程是这样的: 先装了python3.6.1.,然后发现搞错了Σ(  ̄□ ̄||),是32 bit的,卸了重装python 3.6.1 (64bit). 然后装easy_install.pip.i ...

  9. jQuery.getJSON()方法小记

    今天看了下jQquery中的getJSON()方法,做点小结: 原型: jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR ...

  10. ios - 视图 渐变

    // // YViewGradient.m // AoleYou20170907 // // Created by XY IOS on 2018/4/25. // Copyright © 2018年 ...