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 开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余.你的应用程序将会拥有 ...
随机推荐
- Contiki源码分析--CPU为cc253x里的uart0.c
我所使用的Contiki系统是contiki-sensinode.理解该文需要有cc2530里uart的相关知识,具体寄存器的用法不做介绍. 先放上所有代码,然后再仔细分析. #include < ...
- EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由
目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...
- MyBatis从入门到精通:insert用法
2.4.1 简单的insert方法 1.接口类中的方法: int insert(SysUser sysUser); 2.映射文件中的修改: <!-- insert标签包含如下的属性: id: p ...
- 【题解】旅行-C++
Description 某趟列车的最大载客容量为V人,沿途共有n个停靠站,其中始发站为第1站,终点站为第n站.在第1站至第n-1站之 间,共有m个团队申请购票搭乘,若规定:(1)对于某个团队的购票申请 ...
- Fedora dnf配置
1.在配置文件/etc/dnf/dnf.conf中加入: fastestmirror=true keepcache=true 这样下载安装软件就快多了. 2.dnf常用命令 检查并升级可用软件包: $ ...
- ehcache的使用 Shiro与Ehcache的结合(附:EhcacheUtils)
ehcache 缓存的使用 合理的使用缓存会极大的提高程序的运行效率.切记:缓存请勿滥用. 配置ehcache与Shiro shiro初识请查看该文章 https://blog.csdn.net/py ...
- Error:too many padding sections on bottom border.
异常信息: Error:too many padding sections on bottom border. 原因: 使用andoridstudio制作.9图错误. 解决 只怪我把线画多了. 修改后 ...
- Js中关于内部方法、实例方法、原型方法、静态方法的个人见解。
function foo(name){ this.name=name; // 实例方法 this.GetName=function(){ console.log("my name is &q ...
- .NET 欢乐编程术之类型超级转换之术👍👍
准备工作:先确保 VS 版本大于 2017,且支持C# 7.0 语言版本.然后新建 .Net Core 项目,在 Nuget 包管理上引入微软霸霸官方包 System.Runtime.Compiler ...
- 关于C#调用WebServices的方法
2018-1-22 前情是我使用vs在引用高通的webservice时出现了下载错误导致无法引用这个服务,先是在网上查询了这个错误的问题及解决方案,将这个问题与解决方法发给了高通同事,可惜的是他也不清 ...