Android读书笔记一:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

问题描述:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

GitHub Demo

废话少说,上代码,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开发艺术探索》一书案例做的实测,希望能帮助到大家。

GitHub Demo

原文地址:https://www.cnblogs.com/jooy/p/8683167.html

时间: 2024-09-29 01:24:36

Android读书笔记一:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?的相关文章

怎么对ListView添加点击事件,每行点击都打开一个新的Activity。

============问题描述============ package com.example.one_listview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.os.Bundle; import android.app.Activity; import android.content.Context; i

Android 创建一个新的Activity

本文转载自:http://www.cnblogs.com/wuyudong/p/5658020.html 新建一个项目,创建一个java类,继承自Activity 新建一个Android.xml文件:activity_test.xml 这里需要在清单文件里面配置一下 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.

启动一个新的activity并携带数据,返回数据给上一个activity

一.在启动一个新的activity的时候可以通过Intent携带数据,通过Intent.putExtra()方法通过键值对的形势装入数据.在新启动的activity中通过           getIntent()方法获取启动activity的Intent,并通过getxxxxExtra()获取传递的数据. 二.如果希望被启动的新activity返回数据,则需要使用startActivityForResult()启动新的activity,方法携带两个参数,第二个为请求码,用于返回时判断是由哪个a

01_创建一个新的activity&amp;activity配置清单文件

今天开始学四大组件.今天是学Activity,然后是广播接收者,然后是服务,然后是内容提供者.四大组件,咱们一天一个.Activity就是跟用户交互的界面,大部分的应用都不会只有这么一个界面.创建多个Activity,在不同的页面之间进行跳转并且在不同的页面之间进行数据的传递. 创建一个新的Activity,想办法把它给打开.打开一个Activity就涉及到一个隐式意图和一个显式意图.intent,第二天的时候打电话,电话拨号器就用到了这个东西. Activity的生命周期.讲Servlet的时

Pro Android学习笔记(一三七):Home Screen Widgets(3):配置Activity

文章转载仅仅能用于非商业性质,且不能带有虚拟货币.积分.注冊等附加条件.转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei. 通过widget定义.我们在widget列表中看到了我们的TestWidget.当我们拖拽widget到主页时.假设在appwidet-provider中定义了android:configure的java类,在widget实例创建后会立即唤起配置activity.这个activity主要完毕两个任务:1.配置初始化数据

Android 读书笔记

<Android开发艺术探索> 一.Activity 的生命周期和启动模式 1. 当前 Activity 为 A,此时打开 Activity B:A.onPause() → B.onCreate() → B.onStart() → B.onResume() → A.onStop(),故不能在 onPause 中做重量级操作,使新 Activity 尽快显示出来并切换到前台. 2. 当系统内存不足时,系统会按照 [ 后台 Activity → 可见但非前台 Activity → 前台 Activ

Android读书笔记一

通过本章的学习真实体会到“移植”的概念:为特定设备定制Android的过程,但是移植的过程中开发最多的就是支持各种硬件设备的Linux驱动程序,本章对Android和Linux做了总体介绍.接着介绍了Android的四层架构:Linux内核:C/C++代码库:Android SDK API;应用程序.又引入Android移植,Android移植包括两部分:应用移植,系统移植.而且为硬件平台添加新的模块,必须为此模块添加一个新的驱动程序,或者修改原来的程序. 查看Linux内核版本方法: (1)L

一个新的Activity跳转到带有Framgment的Activity页面

思路是:新的Activity跳转到带有Fragment的Activity中,同时带有标志性的标志位. 实例代码: 1 package com.cn.gordon.exhibition.walk.activity; 2 3 import java.io.IOException; 4 import java.util.List; 5 import android.annotation.SuppressLint; 6 import android.app.Activity; 7 import andr

启动并关闭一个新的activity并获得原来activity的数据

前面照着android系统的裁剪图片的功能自己写了一个相似的工具.功能是大体上实现了,但留下了一个调用的问题:如何从我的程序调用这个裁剪工具,并且获得裁剪后的图片呢? 其实这个也很简单了,就是intent的基础用法. 先上个图(界面依旧没优化,难看就难看吧): 起始activity,打开图片选择窗口,随便选择一张图片 我擦,这图截的真大.. 下面是跳转到裁剪界面 按下crop按钮,退出activity,回到原来界面,并显示裁剪后的图 流程就是这样,也算模拟了系统裁剪功能的整体过程.下面就是实现功