Android DevArt1:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?
问题描述:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?
废话少说,上代码,Activity A :
public class AActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a);
} public void goToBActivity(View view) {
startActivity(new Intent(this, BActivity.class));
} @Override
protected void onPause() {
super.onPause();
System.out.println("AActivity.onPause");
} @Override
protected void onStop() {
super.onStop();
System.out.println("AActivity.onStop");
}
}
BActivity:
public class BActivity extends AppCompatActivity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
} @Override
protected void onStart() {
super.onStart();
System.out.println("BActivity.onStart");
} @Override
protected void onResume() {
super.onResume();
System.out.println("BActivity.onResume");
}
}
Log:
03-31 17:08:56.144 4861-4861/com.art.exploration I/System.out: AActivity.onPause
03-31 17:08:56.187 4861-4861/com.art.exploration I/System.out: BActivity.onStart
03-31 17:08:56.189 4861-4861/com.art.exploration I/System.out: BActivity.onResume
03-31 17:08:56.569 4861-4861/com.art.exploration I/System.out: AActivity.onStop
通过上述测试可以发现,在Android 5.0系统上,旧的AActivity的onPause先调用,然后新的BActivity才会启动。
在Android Activity源码中对onPause的解释里有这样一句话:
When activity B is launched in front of activity A, this callback will
be invoked on A. B will not be created until A's {@link #onPause} returns,
so be sure to not do anything lengthy here.
意思是当活动B在活动A前面启动时,该回调将在A上被调用。在A的onPause返回之前,B不会被创建,所以请确保在这里不做任何事情,及不能做耗时操作,会影响B的启动。
通过分析这个问题,我们知道onPause和onStop都不能做耗时操作,尤其是onPause,也就是说尽量在onStop中操作,从而不影响新的Activity尽快显示出来并切换到前台。
注:这篇博客是笔者根据《Android开发艺术探索》一书案例做的实测,希望能帮助到大家。
Android DevArt1:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?的更多相关文章
- Android 创建一个新的Activity
本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件: ...
- 01_创建一个新的activity&activity配置清单文件
今天开始学四大组件.今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者.四大组件,咱们一天一个.Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面.创建多个 ...
- 启动一个新的activity并携带数据,返回数据给上一个activity
一.在启动一个新的activity的时候可以通过Intent携带数据,通过Intent.putExtra()方法通过键值对的形势装入数据.在新启动的activity中通过 getI ...
- 创建一个新的Activity
1.创建一个类继承Activity类,并创建对应的布局文件,在onCreate方法中加载该布局. 2.在AndroidManifest.xml声明该组件 注:如果想配置一个activity在桌面上有该 ...
- Fragment中启动一个新的Activity
最近遇到一个小问题,就是我在主界面中用的是Fragment,其中四个Fragment,然后打算在其中一个里边,写一个TextView(准确地说是Linearout)的单击事件,然后跳转到另外一个Act ...
- Android课程---Oracle VM VirtualBox出现不能为虚拟机打开一个新任务
因工作需要在Win7下增添了Win7虚拟系统,随着VirtualBox 4.326的版本更新,用户们也开始升级.一用户在升级后发现原来创建的虚拟机无法打开,提示信息为:不能为虚拟电脑win7打开一个新 ...
- Android-管理Activity生命周期 -暂停和恢复一个Activity
在正常的使用app时,前台的activity有时候会被可见的组件阻塞导致activity暂停.比如,当打开一个半透明的activity(就像打开了一个对话框),之前的activity就会暂停.只要ac ...
- [android] 开启新的activity获取他的返回值
应用场景:打开一个新的activity,在这个activity上获取数据,返回给打开它的界面 短信发送时,可以直接选择系统联系人 界面布局是一个线性布局,里面右侧选择联系人在EditText的右上,因 ...
- 缺少新的栈标识:报出异常FLAG_ACTIVITY_NEW_TASK flag-是由于activity关闭之后开启一个新的acitivity时没有标识在栈中,所以需要给一个栈标识
异常(栈里必须有activity的flag标识): 05-02 08:43:36.173: E/AndroidRuntime(3328): android.util.AndroidRuntimeExc ...
随机推荐
- 【Redis】编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory
[Redis]编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory 在安装redis进行编译 ...
- OpenJuege 兔子与星空
总时间限制: 1000ms 内存限制: 10000kB 描述 很久很久以前,森林里住着一群兔子.兔子们无聊的时候就喜欢研究星座.如图所示,天空中已经有了n颗星星,其中有些星星有边相连.兔子们希望删 ...
- JS一个算法题
题目:实现超出整数存储范围的两个大整数想加function(a,b).注意:参数a和b以及函数返回值都是字符串. 目的:考算法, 基本逻辑. 我实现的基本思路是: ①两个数字字符串长度补成一样,用字符 ...
- DELPHI中自定义消息的发送和接收
DELPHI中的消息处理机制 Delphi是Borland公司提供的一种全新的WINDOWS编程开发工具.由于它采用了具有弹性的和可重用的面向对象Pascal(object-orientedpasca ...
- C# Microsoft.Office不存在空间名称Interop和Excel
在实际开发过程中,我们经常会对Excel表进行操作.相信大家都都已经很熟悉C#操作Excel的步骤:添加引用->COM->Microsoft Office Excel 11 Object. ...
- MariaDB MaxScale
1. down https://mariadb.com/downloads/#mariadb_platform-mariadb_maxscale (1) install sudo yum locali ...
- Ambari集群的搭建(离线安装)
我们先克隆几台机器 我们打开克隆出来的机器 我们先把主机名修改一下 我们把主机名改成am2 下一步我们来配置网卡 把原来的eth0的注释掉,把现在的eth1改成eth0,同时把mac地址记下来 保存退 ...
- Java - 23 Java 抽象类
Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不 ...
- Android 支付密码输入框,自定义EditText实现密码输入框功能;
刚撸出来的密码输入框,注释和逻辑看着挺清晰的,一些属性还没有添加,下个博客把属性添加上去: 看一下图: 直接看代码吧! import android.content.Context; import a ...
- GNU tar
2.tar教程 2.4.常用选项 2.5.两个选项 2.6.创建档案文档 2.7.查看档案文档内容 4.tar操作 4.1.基本操作 4.2.高级操作 4.3.“-c”的选项 链接到压缩命令 2.ta ...