当前位置: 首页 > 编程日记 > 正文

Activity-生命周期

Activity不是什么陌生的东西,作为Android程序媛对Activity再熟悉不过。每当说起Activity总最关注的还是它的生命周期。

1、一张来自谷歌官方文档的Activity的生命周期图:

直接来个MainActivity覆盖上面所有的方法通过log打印方式给大家展现,通过一个Activity跳转到另一个Activity

package com.lcw.rabbit.activitydemo;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {private static final String TAG = "Rabbit";private Button mbButton;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mbButton = (Button) findViewById(R.id.bt_button);mbButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, SecondActivity.class));}});Log.i(TAG, "1----------onCreate");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "1----------onStart");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "1----------onResume");}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "1----------onPause");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "1----------onStop");}@Overrideprotected void onRestart() {super.onRestart();Log.i(TAG, "1----------onRestart");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, "1----------onDestroy");}
}MainActivity.java

再来个SecondActivity,一样覆写以上所有方法:

package com.lcw.rabbit.activitydemo;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;public class SecondActivity extends Activity {private static final String TAG = "Rabbit";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);Log.i(TAG, "2----------onCreate");}@Overrideprotected void onStart() {super.onStart();Log.i(TAG, "2----------onStart");}@Overrideprotected void onResume() {super.onResume();Log.i(TAG, "2----------onResume");}@Overrideprotected void onPause() {super.onPause();Log.i(TAG, "2----------onPause");}@Overrideprotected void onStop() {super.onStop();Log.i(TAG, "2----------onStop");}@Overrideprotected void onRestart() {super.onRestart();Log.i(TAG, "2----------onRestart");}@Overrideprotected void onDestroy() {super.onDestroy();Log.i(TAG, "2----------onDestroy");}}SecondActivity.java

    

2、Activity的流程之旅:(参照上面的流程图来理解)

实验一:

当我们进入第一个Activity的时候,我们的Log日志依次打印出了:onCreate,onStart,onResume方法。

结论:

当我们第一次启动Activity的时候会调用onCreate方法,然后在界面展示出来的时候调用了onStart方法,当用户获取焦点的时候调用onResume方法。

实验二:

当我们按下Back键的时候,我们的Log日志依次打印出了:onPause,onStop,onDestroy方法。

结论:

当Activity处于暂停(未被完全遮挡,比如弹出对话框状态)的时候会调用onPause,当完全不可见(被隐藏)的时候会调用onStop方法,当被销毁的时候会调用onDestroy方法。

      

实验三:

当我们重新进入Activity,它依旧是调用onCreate,onStart,onResume方法,当我们点击按钮跳转第二个Activity的时候,我们的Log日志依次打印出了:onPause,然后第二个Activity打印出依次onCreate,onStart,onResume,然后第一个Activity再调用onStop方法。

结论:

当Activity处于暂停(未被完全遮挡)的时候会调用onPause,然后启动第二个Activity,执行第二个Activity被创建的生命周期onCreate,onStart,onPause方法,当第一个Activity完全不可见(被隐藏)的时候会调用onStop方法。

      

实验四:

当我们按下Back键返回到第一个Activity的时候,Log日志依次打印出:第二个Activity的onPause,然后进入第一个Activity的onReStart,onStrat,onResume,然后第二个Activity调用了onStop,onDestroy。

结论:

当我们按下Back键返回到第一个Activity的时候,第二个Activity会先调用onPause暂停,由于第一个Activity刚才没被调用onDestroy销毁,所以这里没有重新调用onCreate方法创建而是调用了onReStart方法,然后展示界面onStart,获取屏幕焦点onResume,然后第二个Activity被完全覆盖执行onStop,然后被销毁onDestroy。

3、Activity设计模式之美

疑问1:

为什么不能直接去启动第二个Activiity?

答:

其实大家可以这样来理解,当我启动一个正在执行音乐播放的Activity的时候,突然有一个电话打进来了,电话也是一个Activity,那么在没有对第一个播放音乐的Activity进行暂停操作,就接通了电话,那么是不是我们在边通话的时候还会边放着音乐啊?很显然这是不符合常理的。

疑问2:

当我们启动别的Activity的时候,为什么不先把一个Activity完全销毁了,然后再去启动另一个?

答:

还是刚才打电话的例子,如果我们直接完全销毁了前面一个Activity,那么我们在接电话的时候当然就是舒服,因为没有音乐吵你了,但是当我们接完电话呢?我们是不是又要去重新打开那个音乐的Activity,然后再重投开始听?然后刚好又来一个电话呢?我想这时的你应该要摔电话了。

  再来,如果我们直接去销毁了这个Activity,那刚好这个电话Activity由于不知名原因发生问题呢?那么此时电话的Activity没启动起来,音乐的Activity又销毁了,那么用户的手机屏幕就会出现黑屏(闪屏),这点在用户体验上是非常不好的。

可能敏捷点的朋友已经想到这个暂停方法onPause的好处了,当电话来的时候,我们去暂停音乐Activity的同时调用了onPause方法,我们就可以在这个方法里面去记录一些东西了,比如当前音乐的播放进度,当我们接完电话,回到音乐Activity的时候,我们会调用(实验四)的方法,我们可以在onRestart或者onResume中根据刚记录下来的播放进度去继续播放音乐。

所以Activity的生命周期这样去设计是非常合理的。

转载于:https://www.cnblogs.com/cuishuang/p/5714171.html

相关文章:

arial unicode ms字体_5个检测商用字体和免费字体合集的网站

对于做新媒体和设计的小伙伴来说,最恐慌的就是加班、改稿、脱发、没钱...侵权问题了。一个不注意就是律师函警告。正所谓律师函不是不到,只是晚到。所以,皮皮特意为小伙伴们搜集了这5个远离字体侵权的网站,有检测字体版权的&#…

DAPP是什么

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 1 DAPP是什么1 当满足下所有条件的时候,一个应用才可以称为DAPP [if !supportLists]1. [endif]必须是开源、自治并没有一个实体控制着…

JVM学习--(一)基本原理

前言 JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点。 运行流程 我们都知道java一直宣传的口号是:…

phpexcel导出超过26列解决方案

phpexcel导出超过26列解决方案 原文:phpexcel导出超过26列解决方案 将列的数字序号转成字母使用,代码如下: PHPExcel_Cell::stringFromColumnIndex($i); // 从o,1,2,3,..开始,相应返回返回 A,B,C,...Z,AA,AB,...将列的字母转成数字序号使用,代码如下: PHPExcel_Cell::columnIn…

h5大转盘抽奖源码后台_微信H5互动营销应该要如何做?

现在微信营销的队伍有越来越多的人群,许多的企业品牌都会选择用微信营销,而微信营销这么受欢迎是因为微信拉近了用户与企业品牌的关系。其中H5互动营销是最受欢迎的一种方式,那么微信H5互动营销要如何做呢?企业想要在微信H5营销中…

Solidity语言

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Solidity语言11 Solidity是以太坊智能合约的编程语言,我自己也是学习了很久,感觉是有些难度,所以需要去认真的去…

同一个类 cannot be cast to_留学热门assignment之 税收筹划类essay

税法和税务筹划一直以来都是热门的行业,由于近些年对于税务人才的需求越来越大,税法专业成为了当下最火爆的留学专业之一。发达国家由于税收和法律体系相对完善,法律的条文相较于其他国家而言也更加的细致和有操作性,因此&#xf…

LeetCode 7. Reverse Integer

问题链接 LeetCode 7 题目解析 给定一个32位有符号整数,求其反转数字。 解题思路 如果是简单反转的话,那这道题就太简单了。题目要求判断溢出问题,32位int类型的范围是-2147483648~2147483647。数字反转过后是有可能超出范围的&am…

Ultra-QuickSort POJ 2299(归并排序)

http://acm.hust.edu.cn/vjudge/contest/124435#problem/D 题意:给出一个长度为n的数列,你每一次可以随意交换其中两个数字的位置。问你至少交换几次,才能使得这个数列是个单调递增数列。 比赛时没做出来,(自然&#x…

Geth 控制台使用及 Web3.js 使用实战

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 突然发现没有太多写实战的,所以就写一点自己的拙见,提供给成员一些参考。Geth 控制台(REPL)实现了所…

Java多线程的同步机制(synchronized)

一段synchronized的代码被一个线程执行之前,他要先拿到执行这段代码的权限,在 java里边就是拿到某个同步对象的锁(一个对象只有一把锁); 如果这个时候同步对象的锁被其他线程拿走了,他(这个线程…

mouseenter 延迟_桃园台服加速器 电狐加速器带你低延迟玩游戏

桃园是由冰动娱乐自主研发的全球首款运用世界顶级开发引擎Unreal Engine 3的次世代回合制网络游戏。Unreal 3引擎在骨骼动画树、特效渲染、游戏性完善等方面表现杰出,而且游戏中还可以呈现广角纵身大场景,1080P的高清画质将会带给玩家前所未有的视觉震撼…

私有链的特点简单介绍

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 私有链是区块链的一种,它指的是某个区块链的写入权限仅掌握在某个人或某个组织手中,数据的访问以及编写等有着十分严格的权限…

typescript调用javascript URI.js

URI.js URI.js是一个用于处理URL的JavaScript库它提供了一个“jQuery风格”的API(Fluent接口,方法链接)来读写所有常规组件和许多便利方法,如.directory()和.authority()本文以URI.j…

richeditctrl 选中ole图片 拖拽 空白_高质量的图片素材,碾压度娘几条街......

答应我不要错过​哈喽大家周末好啊,总有小伙伴来问公子说每周的素材分享我到底都是从哪里找的呢,其实公子之前也有告诉过大家,可能是隔的时间太久了。所以今天呢我又给你们整理了一些经常会用到的几个图片网站,都是非常知名而且基…

20160722noip模拟赛alexandrali

【题目大意】 有许多木块, 叠放时, 必须正着叠放, 如图1, 左边两块为合法叠放, 右边为不合法叠放. 图1 一个方块被称为稳定的, 当且仅当其放在最底层, 或其正下方有方块且下方的这个方块的四周都有方块. 叠放必须保证所有方块都稳定. 如图2, 左边3个叠放为合法叠放, 右边2个叠放…

以太坊技术知识讲解

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 以太坊(Ethereum)是2013年底由一个叫作 Vitalik Buterin 的90后小伙子提出来的技术。以太坊和比特币相似,是一个…

大数据数据倾斜

什么是数据倾斜 简单的讲,数据倾斜就是我们在计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。 相信大部分做…

【leetcode75】Intersection of Two Arrays(数组的交集)

题目描述: 给定两个数组求他们的公共部分,输出形式是数组,相同的元素只是输出一次 例如: nums1 [1, 2, 2, 1], nums2 [2, 2], return [2]. 原文描述: Given two arrays, write a function to compute their intersec…

qprocess start怎么判断是否结束_面试结束后,如何判断自己是否有戏?看有无这8大信号!...

关注“职场沉浮宝典”,每天get一个职场小技巧面试结束后,在等待最终结果的过程中,我们常常会惴惴不安,喜欢在脑海里回放全部面试细节,多角度去判断自己通过面试的可能性。毕竟,面试就如同相亲,如…

智能合约语言Solidity 类型介绍

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 智能合约语言Solidity 类型介绍11 Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解&#…

怎样快速学习React

react简单学习路线(实用版) 学习一门新的技术之前有必要了解一下该技术在专业领域的评价,使用的领域,以及整体的学习路线,总之尽可能多的在入坑之前了解相关方面的信息。不要什么都不去查就直接学了,这个是…

Poj_1274 The Perfect Stall -二分图裸题

题目:给牛找棚,每个棚只能容一只牛,牛在对应的棚才能产奶,问最多能让几只牛产奶。 /************************************************ Author :DarkTong Created Time :2016/7/31 10:51:05 File Name :Poj_1274.cpp…

青少年软件编程python考试-青岛全国青少年软件编程等级考试—Python

卓优特机器简介 卓优特机器人是集教育机器人设备研发、生产、销售及课程研发、教育机器人课程教育及竞赛技术服务、机器人实验室方案策划及配置、智能技术支持的高新技术集成服务商, 公司由多所知名大学的多位智能技术专家及教授提供技术指导。 卓优特机器人是集教育机器人设备…

区块链基础--工作量证明

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链基础(6)–工作量证明1 我认为技术和共识构建了区块链,那么就由几个问题需要去解决,第一&…

pat乙级1049

浮点型乘整型和整型乘浮点型结果不同&#xff0c;不知为什么。 1 double sum 0.0; 2 for (int i 0; i < n; i) 3 { 4 cin >> a[i]; 5 sum a[i] * (i 1) * (n - i); 6 } 7 printf("%.2f", sum); 提交结果正确。 1 double sum 0.0; 2 for (int i…

hdu-5778 abs(暴力枚举)

题目链接: abs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Problem DescriptionGiven a number x, ask positive integer y≥2, that satisfy the following conditions:1. The absolute value of y - x is minimal2. To prime f…

bugku 杂项 就五层你能解开吗_你能解开这个和数字有关的逻辑解谜游戏吗? | 每日一考...

今天是一道和数字有关的逻辑解谜游戏看看你能用多长时间得到答案这道题的目标是&#xff0c;把网格根据数字划分成很多个方形小块。每个数字都代表它所在的小块面积&#xff0c;也就是包含了几个小格子&#xff0c;要求如下图&#xff0c;每个小块里必须有&#xff0c;而且只能…

区块链技术术语表

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链技术包含了常见的区块链基本概念和进阶阅读的参考文章&#xff0c;用自己的思考方式去优化理解。 比特币&#xff1a;一种分布式网络的数字货…

『TensorFlow』数据读取类_data.Dataset

一、资料 参考原文&#xff1a; TensorFlow全新的数据读取方式&#xff1a;Dataset API入门教程 API接口简介&#xff1a; TensorFlow的数据集 二、背景 注意&#xff0c;在TensorFlow 1.3中&#xff0c;Dataset API是放在contrib包中的&#xff1a; tf.contrib.data 而在Tenso…