android.app.Activity

android.app.Activity[API译,未完待续]


原文出处:https://developer.android.com/reference/android/app/Activity.html
API 26


注意的点:

  1. 请注意到在>=Android3.0`<Android3.0这两者之间的细微差异。

An activity is a single, focused thing that the user can do.几乎所有的Activity都是用来和用户交互的,当开发者使用Activity创建一个和用户交互的窗口时可以使用setContentView(View)方法来放置开发者设计好的UI布局。通常Activity展示给用户的是一个全屏的窗口,除此之外,它还有其他使用方法:作为浮动窗口(via a theme with windowIsFloating set)或者嵌入另一个Activity中(通过使用ActivityGroup)。
几乎所有的Activity的子类都会实现如下两个方法:

  • onCreate(Bundle):这是你初始化Activity的地方。最重要的是,在这个方法中开发者通常会调用setContentView(int)来布置自己定义的UI布局,并且通过findViewById(int)去检索UI布局文件中需要和程序交互的控件。
  • onPause():当用户离开你的Activity的时候你需要在这里做必要的处理。最重要的是,任何用户做的操作/修改需要在这里被保存起来(通常使用ContentProvider来持有这些数据)。

通过Context.startActivity()来启用Activity。所有的Activity类必须在AndroidManifest.xml文件中有对应的<activity>节点。

一、开发指南

Activity类在一个应用整体的生命周期中是一个重要的部分,activity的启动和组合方式是平台应用模型的基本组成部分。在本开发指南中你会看到关于如何创建Activity的更多细节。

二、Fragments

从android3.0开始,Activity的实现中可以通过使用Fragment类更好的模块化代码,为大屏幕创建更复杂的用户界面,帮助扩展了Activity在大小屏幕之间的应用。

三、Activity Lifecycle

在系统中通过activity stack(Activity栈)管理Activity们。当一个新的Activity被启动起来,它会被放到栈顶称为正在运行的activity – 旧的Activity一直保存在栈中,直到栈顶的新Activity退出旧的Activity才会重新位于栈顶。
Activity有如下4中基本状态:

  • active/running :如果一个Activity位于栈顶(在所有的Activity之前),状态是active/running
  • pause :如果一个activity已经失去焦点并且处于可见的状态(就是说一个非全屏的或者一个透明的Activity位于栈顶),状态是pause。处于pause状态的Activity还是存活的状态(它保持着所有状态和成员信息,并且依旧附属于Window manager),但是在系统处于极端内存不足的状态下该Activity会被杀死。
  • stoped :如果一个Activity完全被其他的Activity遮蔽处于用户不可见的状态,它的状态是stoped。它依然保留了所有的状态和成员信息,然而,当其他地方需要内存的时候本状态下的Activity经常会被杀死。
  • 如果一个Activity处于paused或者stopped的状态,系统可以通过调用其自身的finish()方法或者直接杀死该进程从而把该Activity清除出内存。当该Activity需要再一次被展示的时候,它必须完全重新启动并恢复到以前的状态。

这里写图片描述

流程图中有三个关键的闭环,或许你有兴趣来据此监测你的Activity:

  • entire lifetime: 从首次调用onCreate(Bundle)当且仅当到调用onDestroy()我们称之为entire lifetime。Activity会在onCreate方法中初始化所有需要的数据。并在onDestory方法中释放所有本Activity占用的系统资源。例如,如果一个线程运行在后台下载某些内容。这个线程很可能是在onCreate中创建在onDestory中停止
  • visible lifetime:在调用onStart并在调用对应的onStop这之间的这个过程就是visible lifetime。在这一过程中当前Activity可能并不在栈顶,但是用户用户可以在屏幕上看到Activity。在这两个方法调用之间,会持续保存在向用户展示本Activity所需要的所有数据/资源。例如,你可以在onStart方法中注册BroadcastReceiver用来监测UI变化,当用户不能再看该Activity展示什么的时候在onStop中注销监听。onStartonStop方法可以调用多次用来显示或隐藏Activity
  • foreground lifetime:在调用onResume并在调用对应的onPause这之间的这个过程就是foreground lifetime。在这个过程中的Activity处于Activity栈顶处于可以和用户交互的状态。一个Activity可能频繁地切换pause或者resume状态 – 例如,设备睡眠,when an activity result is delivered, when a new intent is delivered – 所以在这两个方法中的代码应该尽可能的轻量级

activity完整的生命周期方法就是通过如下方法定义的。在以下每一个方法节点处你可以根据Activity生命周期状态的变化通过override方法来做恰当的工作。所有的Activity都要实现onCreate(Bundle)去实现该Activity的初始化设置;很多Activity也会实现onPause()当该Activity失去焦点的时候及时提交尚未保存的数据因为该Activity可能就没机会再次和用户交互。

public class Activity extends ApplicationContext {
    protected void onCreate(Bundle savedInstanceState);

    protected void onStart();

    protected void onRestart();

    protected void onResume();

    protected void onPause();

    protected void onStop();

    protected void onDestroy();
}

生命周期的一般动向:

MethodDescriptionKillable?Next
onCreate()当Activity首次创建的时候调用。在本方法中通常做一些初始化内容:创建View,把数据绑定到list上,等。本方法会提供一个包含Activity之前冻结(如果之前做过冻结操作)状态的Bundle数据包。—>在它之后的方法总是onStart()NOonStart()
onRestart()当你的Activity已经处于stopped状态之后才有可能调用本方法,调用之后Activity状态会再次转换为started—>在它之后滴啊用的方法总是onStart()NoonStart()
onStart()调用本方法后Activity变为用户可见的状态。—>如果本Activity处于栈顶接下来叼哦用的是onResume()方法,如果当前Activity是隐藏的接下来调用的方法是onStop()NoonResume() or onStop()
onResume()调用本方法之后Activity变为可以和用户交互的状态。这是对应的Activity是处于栈顶的,用户可以操作该Activity。—>在本方法之后调用的是onPause()NOonPause()
onPause()当系统开始恢复之前的Activity之前调用。本方法通常用来提交尚未保存的持续性的数据,停止动画效果或者做一些其他消耗CPU的行为。值得注意的是本方法的具体实现应该尽可能的少消耗时间,因为在本方法执行完成之前下一个Activity是不会resume(恢复)的。—>如果本Activity调用onPause失去焦点之后再次获取焦点会调用本方法;如果在调用onPause失去焦点后本Activity变得不可见了那接下来调用的方法就是onStop()Pre-HONEYCOMB(自3.0起No,之前Yes)onResume() or onStop()
onStop()当因为别的Activity的启动导致本Activity被覆盖而不可见的时候会调用本方法。当一个Activity正在调用onStart()方法的时候另一个Activity被调用回到Activity栈顶那么前一个Activity将直接调用onStop()方法。或者当一个Activity正在调用onStart()方法的时候该Activity被销毁(这里说的应该是尚未onResumefinish)。—>如果调用本方法后的Activity再次回到Activity栈顶就会调用onRestart()方法,如果调用onStop()方法之后本Activity被销毁那会调用onDestory()YesonRestart() or onDestroy()
onDestroy()一个Activity销毁之前的最后动作在本方法完成。本方法的调用会发生在:调用finish()之后,或者系统需要为了节省内存而销毁Activity实例的时候。开发者可以通过isFinishing()方法来区分以上二者具体情形。Yesnothing

Node:上表中的“Killable”列 – 用来标记对应的方法执行完成后Activity进程是否可以被系统杀死导致不能多执行一句后续代码。也正是因为这个原因开发者需要使用onPause()把所有长期被需求的数据(例如用户编辑一半的内容)本地化存储起来。除onPause()这个方法,onSaveInstanceState(Bundle)也可以用来存储Activity的后台状态,可以把任何动态的实例信息存储到参数给定的Bundle对象中,在之后重新启动Activity的时候存储的信息会传递给onCreate(Bundle)这一点在* Process Lifecycle*小节中有详细的论述。注意:一些关键的数据在onPause()方法中存储更优于在onSaveInstanceState(Bundle)中。因为后者并不是Activity生命周期中的回调方法,所以并不会在任何情况下都保证被调用。

值得注意的一点是以上的内容在Android3.0( HONEYCOMB )开始有了细微的变化。(即,以上内容在Android3.0之前是完全正确的认知)从Androida3.0开始在onStop()方法执行完成之前Activity不会被杀死,也就是说在Activity被清除出内存之前必然要执行onStop()方法。这一个点的改变造成的影响是:我们可以推迟到onStop()生命周期方法中保存我们认重要的数据,而且onSaveInstanceState(Bundle)的调用也变的更有保障。

在被标记为No的方法从开始执行到方法执行结束系统都不会杀死其所在Activity进程。因此在onPause() - onResuame()之间的Activity进程是可以被杀死的。


本次关注的焦点告一段落。
整体未完,待续~~~

4.Configuration Changes
5.Starting Activities and Getting Results
6.Saving Persistent State
7.Permissions
8.Process Lifecycle


此文仅做参考,文中尚有作者力不能及之处,希望路过的您不吝赐教。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值