Android:日常学习笔记(6)——探究活动(3)
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)的更多相关文章
- Android:日常学习笔记(6)——探究活动(4)
Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...
- Android:日常学习笔记(5)——探究活动(2)
Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...
- Android:日常学习笔记(4)——探究活动(1)
Android:日常学习笔记(4)——探究活动 什么是活动: 活动是最容易吸引用户的地方,它是一种可以包含用户界面的组件,主要用于和用户进行交互. 手动创建活动 创建空活动 1.新建活动时选择Add ...
- Android:日常学习笔记(9)———探究持久化技术
Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...
- Android:日常学习笔记(7)———探究UI开发(4)
Android:日常学习笔记(7)———探究UI开发(4) UI概述 View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...
- Android:日常学习笔记(9)———探究广播机制
Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...
- Android:日常学习笔记(8)———探究UI开发(5)
Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...
- Android:日常学习笔记(8)———探究UI开发(3)
Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...
- Android:日常学习笔记(8)———探究UI开发(2)
Android:日常学习笔记(8)———探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...
随机推荐
- HTTP解读
使用Telnet工具访问web资源 Windows中没有telnet这一工具,下面在Linux下演示: telnet www.baidu.com 80 Trying 61.135.169.125... ...
- MVC-Model
用模型取代字典理由: **使用字典的坏处 一般情况下,存入数据和取出数据都使用“字典类型的key”,编写这些key时,编译时不会有任何的友善提示,需要手敲,容易出错. dict[@“name”] = ...
- Silverlight-管理独立存储(Isolated Storage)
Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight 随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保存大 ...
- 用Flex实现常见的几种布局
用Flex实现常见的几种布局 1.水平,垂直居中. <style type="text/css"> .container{ display: flex; width: ...
- 微信 oauth4
4.最后 4. 使用access_token获取用户信息 请求方法: https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN& ...
- 【泰语歌】กลับคำสาหล่า 歌手:Mike Piromporn
Darling,Please don't leave me. 很短的一句话,可能会摧毁我们在一起的所有美好时光.
- 使用神器MobaXterm连接远程mysql和redis
https://mobaxterm.mobatek.net/download-home-edition.html mysql redis 连接测试 mysql 127.0.0.1 3307 密码使用线 ...
- SSH后台管理系统,实现查询+分页
一个搜索框,然后会获取大量信息,将信息进行分页,每一页显示固定条数. mysql中使用“like”和“%%”进行模糊匹配,用“limit”进行分页. 1.首先创建一个页面信息的实体类,代码如下: im ...
- JS中的关键字和保留字
JavaScript中不能作为变量名的关键字和保留字总结: 1.js中的关键字: break case catch continue default delete do else finally fo ...
- C#反射应用-- 深圳精致抖友小群,质量的同学入群,限深圳地区(放几天我就删,管理别封我)
C#反射的应用 Dapper轻量级ORM框架,不能根据主键ID获取实体,及不能根据主键ID删除记录,所以这里记录自己封装的一个方法来实现这个功能 /// 根据主键Id删除记录(包含根据主键获取记录) ...

