android ——活动的生命周期
在其生命周期内,activity在运行、暂停和停止三种可能的状态间进行转换,不同状态之间互相转换的时候的调用不同的方法,重写这些方法就能在活动切换,被销毁时保存或传输数据,在被启动、被切换出来时接收数据。或是完成其他一些工作。

然后是一个简单的demo,拥有两个活动,主活动中有一个启动第二个活动的按钮,第二个活动中有返回第一个很活动的按钮。
public class MainActivity extends AppCompatActivity {
// 在完整生存期开始时调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//加载布局
Log.d("MainActivity","onCreate");
Button button1 = (Button) findViewById(R.id.button1);
Button button2 = (Button) findViewById(R.id.button2);
//启动第二个活动
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
//销毁当前活动
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
//由不可见转换为可见时调用
@Override
protected void onStart() {
super.onStart();
Log.d("MainActivity","onStart()");
}
//由可见转换为不可见时调用
@Override
protected void onStop() {
super.onStop();
Log.d("MainActivity","onStop()");
}
//离开前台,但不是完全不可见
@Override
protected void onPause() {
super.onPause();
Log.d("MainActivity","onPause()");
}
//返回前台,准备好和用户交易
@Override
protected void onResume() {
super.onResume();
Log.d("MainActivity","onResume()");
}
//重启处于停止状态的活动时对用
@Override
protected void onRestart() {
super.onRestart();
Log.d("MainActivity","onRestart()");
}
// 在完整生存期结束时调用
@Override
protected void onDestroy() {
// 清空所有的资源,包括结束线程、关闭数据库连接等。
super.onDestroy();
Log.d("MainActivity","onDestroy");
}
}
每个方法中都会有一个该方法名字的打印。
首先是第一次启动活动,

先出现了onCreate onStart、onResume(创建->启动->运行)方法
点击按钮启动第二个活动

点击第二个活动的按钮,启动第一个活动

点击销毁按钮,调用finish方法销毁第一个活动

这时第二个活动会被打开,也就是说活动再相互被启动的时候,不会被销毁,onDestory()不会被调用,这时点击返回,

由会启动第一个活动,然后并没有调用onCreate()方法,这就说明刚刚销毁的活动不是这个活动,回想一下刚刚的整体过程就是,一开始打开启动的MainActivity启动了SecondActivity,然后SecondActivity通过Intent启动的MainActivity和刚开始那个MainActivity并不是同一个,当SecondActivity通过Intent启动的MainActivity的时候,栈中一共有三个活动,该开始启动的MainActivity和SecondActivity处在停止状态,MainActivity处于栈底,所以销毁掉栈顶的MainActivity后SecondActivity就被重启。
销毁栈顶的MainActivity,在SecondActivity点击返回后,打开了最开始的MainActivity,这时点击home键回到桌面

这里可以看到,只有是活动变得完全不可见,无论是启动了其他活动,还是返回桌面都会出现onPause、onStop(暂停->停止)方法。
android ——活动的生命周期的更多相关文章
- Xamarin.Android活动的生命周期
一.前言 用过Android手机的人一定会发现一种现象,当你把一个应用置于后台后,一段时间之后在打开就会发现应用重新打开了,但是之前的相关的数据却没有丢失.可以看出app的“生命”是掌握在系统手上的, ...
- Android活动的生命周期
掌握活动的生命周期对任何Android开发者来说都非常重要,当你深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序. -------------------------------------- ...
- android 活动的生命周期
掌握活动的生命周期非常重要,因为一个正常的android应用,会有很多的活动,如何在这些活动之间进行切换.数据的交互等,就经常会用到活动的生命周期这一块的知识.可以说,只要掌握了活动的生命周期,才能更 ...
- 记不住的Android活动的生命周期
Activity基类定义了管理一个互动的生命周期的一系列事件. Activity生命周期的一系列事件onCreate()——当前活动首次被创建时使用.onStart()——当前活动对用户可见时调用.o ...
- Android笔记——活动的生命周期
一.活动的重要性 掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的游刃有余.你的应 ...
- Android学习笔记(五)——活动的生命周期
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! 为了能写出流畅连贯的程序,我们需要了解一下活动的生命周期. 一.返回栈 Android 中的活动是可以层叠的. ...
- Android studio教程:[5]活动的生命周期
想要学好安卓开发,就必须理解安卓软件的生命周期,明白一个活动的创建.启动.停止.暂停.重启和销毁的过程,知道各个阶段会调用什么函数进行处理不同的情况,这里我就通过一个简单的例子让大家明白一个活动的生命 ...
- Android基础知识05—活动的生命周期
------ 活动的生命周期 ------ Android是使用任务Task来管理活动的,一个任务就是一组存放在栈里的活动的集合.每当启动一个活动 ,他就会在返回栈中入栈,并处于栈顶位置.而每当我们按 ...
- android:activity活动的生命周期
掌握活动的生命周期对任何 Android 开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余.你的应用程序将会拥有 ...
随机推荐
- 成功入职ByteDance,分享我的八面面经心得!
今天正式入职了字节跳动.办公环境也很好,这边一栋楼都是办公区域.公司内部配备各种小零食.饮料,还有免费的咖啡.15楼还有健身房.而且公司包三餐来着.下午三点半左右还会有阿姨推着小车给大家送下午茶.听说 ...
- 2050编程赛 冰水挑战 HDU 6495
题目地址:https://vjudge.net/problem/HDU-6495 思路:我们需要维护的是挑战了n个之后剩余体力值,剩余体力值越大越好dp[N(i)][N(j)],第一个维度,记录当前是 ...
- [Usaco2007 Open]Fliptile 翻格子游戏题解
问题 B: [Usaco2007 Open]Fliptile 翻格子游戏 时间限制: 5 Sec 内存限制: 128 MB 题目描述 Farmer John knows that an intell ...
- NOIP2002 字串变换题解(双向搜索)
65. [NOIP2002] 字串变换 时间限制:1 s 内存限制:128 MB [问题描述] 已知有两个字串A$, B$及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ ...
- 【小家Spring】聊聊Spring中的数据绑定 --- DataBinder本尊(源码分析)
每篇一句 唯有热爱和坚持,才能让你在程序人生中屹立不倒,切忌跟风什么语言或就学什么去~ 相关阅读 [小家Spring]聊聊Spring中的数据绑定 --- 属性访问器PropertyAccessor和 ...
- 通过sparkstreaming分析url的数据
spark version 1.6.2 scala verson 2.10.6 此代码参考官方例子---- 自定义接收器 import java.io.BufferedReader import or ...
- js深入之call、apply和bind
一. call和apply 1. 代码完整实现 Function.prototype.mycall = function (context, ...argus) { if (typeof this ! ...
- TensorFlow笔记-组件
张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更代表的就是一种 ...
- C#3.0新增功能09 LINQ 基础08 支持 LINQ 的 C# 功能
连载目录 [已更新最新开发文章,点击查看详细] 查询表达式 查询表达式使用类似于 SQL 或 XQuery 的声明性语法来查询 IEnumerable 集合. 在编译时,查询语法转换为对 LIN ...
- dll附加依赖项查看——dumpbin 命令
VS自带工具 查看程序或动态链接库需要的动态链接库 dumpbin /dependents d:\test.exe 查看动态链接库的输出函数 dumpbin /exports d:\libmysql. ...