基础篇1:Activity

目录
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彻底运行起来之后的回调

注意

  • 几乎所有Activity的子类,都会实现onCreate和onPause这两个方法.
参考资料

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页面跳转页面

参考资料

推荐阅读更多精彩内容

  • 本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。 一、前言 Activity,安卓四大组件之一。 每个 A...
    阿敏其人阅读 8,572评论 9 88
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w阅读 529评论 0 4
  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    安卓Boy阅读 1,277评论 3 5
  • 5月19日 晚上21:05 随着一条提示:“我通过了你的好友验证请求,现在我们可以开始聊天了” 但是我却没有立刻就...
    327d4d59514f阅读 147评论 0 2
  • 主啊,是你给了我福分和怜悯,给了我生活向上的动力,老婆一向辛苦付出,为了家,为了儿女,无怨无悔,我爱她,更爱我的家。
    我主何等伟大阅读 90评论 0 0
  • 1/2. 创建pch文件 2/2. 配置pch文件到项目
    莫_名阅读 1,154评论 0 3
  • 这两天,一直没有上来,看过,写过,这两天,一直围绕着我的,是和你一起的时光,看着微信的你,我想说我想你,但想到你在...
    桃树的眼泪阅读 119评论 0 0
  • 老天仿佛因为什么伤了心 淅淅沥沥地 泪流一夜 直哭得天地都变颜色 吓得春姑娘也换上了素衣 艳丽的春花 清脆的...
    岩上无心云相逐1阅读 177评论 3 4