热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android基础篇1:Activity

目录1.生命周期2.启动模式3.Activity任务栈(管理Activity)4.Activity四种状态5.Android进程优先级6.scheme跳
目录
1.生命周期
2.启动模式
3.Activity任务栈(管理Activity)
4.Activity四种状态
5.Android进程优先级
6.scheme跳转协议

1.生命周期

Activity生命周期流程图

在谷歌官方文档中,这样说道每个方法的作用: 

onCreate

在activity正常生命周期的情况下,创建的时候执行一次且是第一次创建时调用,此后,都不再执行,鉴于这种情况,在activity生命周期内,只需要初始化一次的变量。
例如:这里应该完成所有静态资源的建立, 比如使用setContentView(int)和布局资源定义你的UI视图, 使用findViewById(int)取出程序中需要交互的控件, 绑定数据.
此时视图还不存在,无法调用动画等.
还有需要注意, 每次activity启动, 不一定都会调用这个函数. 当当前activity只是被覆盖一部分, 当前activity再次可交互时,是只调用onResume方法, 不会调用onCreate方法.

onStart

可以在onStart中检测一些必要的初始化条件。

  • 例如检查gps是否可用。如不可用,可以提示用户设置。离开返回时,必定还会调用onStart,可以再做检测。

onResume

打开独占设备,如相机,在onPause中释放.

onPause

  • onPause是释放资源的最佳时机
  • 如果当前activity拥有独占资源(比如相机), 必须在这里释放, 以免在下一个activity中需要用到
  • onPause方法的执行时间会直接影响下一个Activity的启动流畅度
  • onPause执行有一定的时间限制(500ms)

底层执行Activity 的onPause()时,有一定的时间限制的,当ActivityManagerService通知应用进程暂停指定的Activity时,如果对应的onPause()在500ms内还没有执行完,ActivityManagerService就会强制关闭这个Activity。如下就是对应的onPause()执行超时常量定义:

// How long we wait until giving up on the last activity to pause.//This is short because it directly impacts the responsiveness of startingthe// next activity.static final int PAUSE_TIMEOUT = 500; // 定义在ActivityStack.java中

onStop

在onStop中,可以执行一些稍微重量一点的任务。
请注意: 在内存不足而导致系统无法保留此进程的情况下, onStop() 可能不会被执行。

onDestroy

在onDestory中可以释放一些变量,特别是在onCreate中初始化,存在在整个生命周期内的变量,例如bitmap的回收

onRestart

重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。

onPostCreate——Activity彻底运行起来之后的回调

  • 关于onPostCreate——Activity彻底运行起来之后的回调

注意

  • 几乎所有Activity的子类,都会实现onCreate和onPause这两个方法.
参考资料
  • Activity生命周期详解
  • Android 生命周期中每个函数适合处理的事件
  • Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
  • android activity 应该知道的一切(完整篇)

2.启动模式

  • standard
  • singletop
  • singletask
  • singleinstance

参考资料

3.Activity任务栈

  • 先进后出

4.Activity四种状态

running / paused / stopped / killed
  • runing

用户可以点击,activity处于栈顶状态。

  • paused

activity失去焦点的时候,被一个非全屏的activity占据或者被一个透明的activity覆盖,这个状态的activity并没有销毁,它所有的状态信息和成员变量仍然存在,只是不能够被点击。(除了内存紧张的情况,这个activity有可能被回收)

  • stopped

activity失去焦点的时候,被一个非全屏的activity占据或者被一个透明的activity覆盖,这个状态的activity并没有销毁,它所有的状态信息和成员变量仍然存在,只是不能够被点击。(除了内存紧张的情况,这个activity有可能被回收)

  • killed

这个activity已经被销毁,其所有的状态信息和成员变量已经不存在了。

5.Android进程优先级

前台 / 可见 / 服务 / 后台 / 空
1. 前台进程:Foreground process
  • 用户正在交互的Activity(onResume())
  • 当某个Service绑定正在交互的Activity
  • 被主动调用为前台Service(startForeground())
  • 组件正在执行生命周期的回调(onCreate()、onStart()、onDestory())
  • BroadcastReceiver正在执行onReceive()
2. 可见进程:Visible process
  • 我们的Activity处在onPause()(没有进入onStop())

绑定到前台Activity的Service

3. 服务进程:Service process
  • 简单的startService()启动。
4. 后台进程:Background process
  • 对用户没有直接影响的进程 --- Activity处于onStop()的时候。

android:process=":xxx"

5. 空进程:Empty process
  • 不含有任何的活动的组件。(Android设计的,处于缓存的目的,为了第二次启动更快,采取的一个权衡)

6.scheme跳转协议

Android中的scheme是一种页面内跳转协议,通过定义自己的scheme协议,可以跳转到app中的各个页面

  • 服务器可以定制化告诉app跳转哪个页面
  • App可以通过跳转到另一个App页面
  • 可以通过H5页面跳转页面

参考资料

  • Android面试(一):Activity面试你所需知道的一切
  • Android Activity 你所需要知道的一切


推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 在Java中,我会做这样的事情:classPerson{privateRecordrecord;publicStringname(){record().get(name);}p ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 配置IPv4静态路由实现企业网内不同网段用户互访
    本文介绍了通过配置IPv4静态路由实现企业网内不同网段用户互访的方法。首先需要配置接口的链路层协议参数和IP地址,使相邻节点网络层可达。然后按照静态路由组网图的操作步骤,配置静态路由。这样任意两台主机之间都能够互通。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
author-avatar
书友55918792
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有