(android文档原创翻译)管理Activity的生命周期<一>

(英文原文链接地址)

1.启动你的Activity

不同其它的应用程序通过main()方法来启动,android系统是按照一定的顺序通过调用其生命周期(lifecycle)的回调方法来启动或者结束一个activity。本节简要介绍了Activty的最为重要的生命周期,并且示意了怎样处理一个Activity的生命周期.

理解什么叫做生命周期的callbacks

在Activity的生命周期中,android系统会按顺序调用一系列类似于金字塔形排列的生命周期方法,即activity生命周期的每个阶段都属于金字塔的某一层.当系统创建一个Activity的时候,生命周期中的每一个方法的调用都会让Activity让生命周期金字塔的状态发生跳转(改变),而处于金字塔顶端的状态即为activity当前生命周期的可见和可交互的阶段。

当用户需要离开Activity的时候,系统会调用其它的一些方法让Activity的生命周期跳转到其它方法中.在一些cases中,Activity仅会部分的沿着金字塔进行跳转和等待(例如当用户切换到其它的APP时候).如图

图1.为活动周期的简化图示,表示activity的生命周期*金字塔,显示了activity的生命周期之间的变化,以及生命周期的各个状态之间的转换

根据你Activity的复杂性,你不需要implement生命周期中的所有方法,但是你要明确的知道每一个生命周期的意义,确保应用是以用户期望的方式运行,为了实现确保你的应用能够满足用户的期望,你需要注意但不限于以下几点:

  • 当用户接到一个电话或者切换到其它的应用,应用不会被crash掉.当用户没有使用一些资源的时候,记得释放掉它们
  • 当离开你的应用后再返回,你的应用不应该丢失掉前面的状态信息
  • 当应用发生横竖屏切换的时候,确保应用不被crash掉并且不要丢失前面的状态信息

在随后的学习的课程中,有几种状态用于表示图1中不同状态之间的转换,但是只有三种状态时处于静态的,也就是说activity能够长时间的存活在这三个状态中:

Resumed   在这个生命周期中,Activity是处于前台,并且用户能够与之交互(有时我们也叫做"运行"状态)

paused        在这个状态中,Activity被其它的Activity部分覆盖,其它处于前台状态Activity是半透明或者不会全部遮盖,被覆盖的activity是不能接受用户的输入也不会执行任何代码.

Stopped     在这个状态中,Activity完全被隐藏而且用户是不可见的,Activity是被认为是处于后台的,当进入stop状态时,这个Activity的所有状态信息如成员变量会被保留,但是不能够执行任何的代码

至于其它的状态(Creaded and Stated)应用的生命周期会快速的进行转换,如系统调用onCreate()后,它会立即调用onStart(),然后快速的跳转到onResume() 以上是关于Activity的生命周期的基本知识,接下来我们将学习到关于Activity的特殊的行为。

指定你APP的启动Activity

当用户在home屏幕中点击你应用的图标时,系统会调用你声明作为程序入口的"launcher activity""的onCreate方法,你有几种方法可以指定你APP的入口。

你可以在AndroidManifest.xml中指定APP的main activity,AndroidManifest.xml是在你项目的根目录下面.

这个main activity必须被显式的在mainfest 下面的<intent-filter>中声明,在<intent-filter>中包括了MAIN
action 和LAUNCHERcategory.例如:

   <activity android:name=".MainActivity" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    

提示:当你使用android SDK创建一个android project的时,系统会在项目文件夹下面创建一个默认的启动activity

如果你没有显式的声明MAIN Action或者LAUNCHER catgory的时候,你的APP的icon将不会出现在Home屏幕(也就是我们手机的桌面上)列表中.

创建一个新的实例

绝大多数的APP中都包含了多个activity,他允许用户在多个Activity中进行切换,当用户点击APP的icon时一个mian activity将会被创建,系统会调用onCreate()方法来创建一个activity的实例。

你必须实现onCreate方法来开始一个activity的逻辑和这个activity的生命周期,例如,你在onCreate中定义用户的界面并实例化一些变量.

例如,你在下面的例子的onCreate的方法中显式的声明了用户的用户接口(定义在XML文件),定义了成员变量,并且配置了一些UI配置。

    TextView mTextView; // Member variable for text view in the layout

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set the user interface layout for this Activity
        // The layout file is defined in the project res/layout/main_activity.xml file
        setContentView(R.layout.main_activity);

        // Initialize member TextView so we can manipulate it later
        mTextView = (TextView) findViewById(R.id.text_message);

        // Make sure we're running on Honeycomb or higher to use ActionBar APIs
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            // For the main activity, make sure the app icon in the action bar
            // does not behave as a button
            ActionBar actionBar = getActionBar();
            actionBar.setHomeButtonEnabled(false);
        }
    }

一旦onCreat()执行完毕,系统会快速的调用onStart()和onResume()方法,你的Activity不会停留在Created和Stated状态,当系统调用onStart()方法时候activity是变成可见的状态,但是onResume()方法会快速的被调用并处于Resumed状态直到某些事情发生或者改变,例如当电话被呼叫时候,应用被切换到其它的Activty或者屏幕发生横竖排改变时.

在接下来的其它的课程中,你讲学习到当用户从Stoped和Paused状态回到resumed状态的过程中onStart()和onResume()方法非常有用的。

*Note:onCreate()方法中包含了一个savedInstanceState参数,这个问题在后面的Recreating an Activity.课程中进行讨论

Figure 2. Another illustration of the activity lifecycle structure with an emphasis on the three main callbacks that the system calls in sequence when creating a new instance
of the activity: onCreate(), onStart(), and onResume(). Once this sequence of callbacks complete, the activity reaches the Resumed state where users can interact with the activity until they switch to a different activity.

销毁(Destroy)Activity

当Activity第一次创建的时候会调用OnCreate()方法,它最终会调用onDestroy()方法,当onDestroy()方法执行完后系统会将Activity的实例从内存中移除.

大多数的app应用不需要实现onDestroy这个方法,因为Activity的实例引用会随着Activity的销毁而回收,在onPause()和onStop()的状态中而被清除.然而,如果你的Activity中有后台线程或者长时间被引用的资源,那么你必须在onDestroy()中进行清除回收,否则会造成内存泄漏.

 @Override
    public void onDestroy() {
        super.onDestroy();  // Always call the superclass

        // Stop method tracing that the activity started during onCreate()
        android.os.Debug.stopMethodTracing();
    }

Note:在onPause()和onStop()执行完后系统会调用OnDestroy()方法,除非:你自己在onCreate()方法调用finish()方法.在一些cases中,例如当前的Activity用来临时启动其它的Activity的时候,你可能会在onCreate()中使用finish()方法来结束当前的Activity,这个时候系统会立即调用onDestroy()方法而不会进过其它的生命周期.

NEXT:pausing and Resuming an activity

pS:以上链接请自备VPN账号,作为一个android开发的没有VPN账号很多信息只能是二手信息,这里我推荐使用(红杏软件

时间: 2024-10-27 19:00:46

(android文档原创翻译)管理Activity的生命周期<一>的相关文章

Android学习路线(十一)管理Activity的生命周期

当一个用户进入,退出,再次进入你的应用时,你的应用中的Activity 会在它的生命周期的各个状态下切换.例如,当你的activity第一次启动,它出现在系统的前方接受用户的焦点.在这个过程中,Android系统调用了一系列的生命周期方法来设置UI和其他组件.如果用户执行了一个操作,启动了另一个activity或者切换到其它应用中,你的activity会移动到后台(这时activity已经不可见,但是它的实力和状态都保持不变),系统会调用另外的一些生命周期方法. 通过这些生命周期方法,你可以声明

[安卓基础] 007.管理Activity的生命周期

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

[Android]管理Activity的生命周期

一.简要介绍 当用户开始,暂停,退出,重新进入一个APP的时候,APP中Activity实例在它生命周期的不同状态之间转换.比如当你第一次启动一个Activity时,Activity来到系统的前端获得用户焦点.在这个过程中,Android系统调用了一系列生命周期方法.如果用户启动或者切换到另一个APP,系统调用另外一系列的方法. 生命周期调用方法可以说明在用户离开或者重新进入Activity时,Activity执行哪些行为. 接下来我们将解释每一个Activity都有的生命周期方法,并且说明如何

Android学习笔记(十) Activity的生命周期

一.如何在一个应用程序中定义多个Activity -定义一个类,继承Activity -复写onCreate() setContentView(R.layout.secondLayout):设定该Activity使用的布局文件 -在AndroidManifest.xml文件中注册该Activity 1)在Application标签里面加入一个Activity标签,name一般为"包名+类名",label一般为Activity名 2)如果要修改程序默认启动的Activity,需要将int

朝花夕拾-android 自定义application 管理activity的生命周期

为了安全退出多个已创建的activity? 可以自定义application:myapplication. 增加一个list成员保存,一些关键的已创建的activity实例: 1 private List<Activity> activityList = new LinkedList<Activity>(); 2 3 // 保存 所有activity的this 4 public void addActivity(Activity activity) { 5 activityList

laravel文档中提及的request的生命周期

请求进入 public/index.php 文件. bootstrap/start.php 文件创建应用程序对象并检测环境. 内部的 framework/start.php 文件配置相关设置并加载服务提供器. 加载应用程序 app/start 目录下的文件. 加载应用程序的 app/routes.php 文件. 将 Request 对象发送给应用程序对象,应用程序对象返回一个 Response 对象. 将 Response 对象发回客户端.

【Android文档】Processes and Threads

大致翻译一下,记录笔记. 原文地址:Processes and Threads Processes and Threads 当一个app的组件(这里一般指四大组件Activity,Service等)启动时,如果此时系统没有其他组件正在运行,则android系统会为该app启动一个新的linux进程,而且该进程中只有一个线程.默认情况下,app中的所有组件,都运行在同个进程中的同个线程(称为主线程).如果一个app的组件启动时,该app中已经存在一个进程,则该组件将运行在同一个进程中,并且使用同一

Vlang官网文档(中文翻译)-vlang中文文档--v0.1.0_20180625

PS:主要为自己学习,,,,看的时候顺便翻译的,,,渣翻(非全人工)勿喷. 介绍 V是一种用于构建可维护软件的静态类型编译编程语言. 它与Go相似,也受到Oberon.Rust.Swift的影响. V是一种非常简单的语言,阅读这份文档大概只需要半小时的时间,读完之后,您将学习到V的全部内容. 尽管很简单,但是它为开发人员提供了很多功能,你能用其它编程语言做的任何事情,都可以用V做到. Hello World fn main() { println('hello world') } 函数用 fn

PHP经验——PHPDoc PHP注释的标准文档(翻译自Wiki)

标记 用途 描述 @abstract   抽象类的变量和方法 @access public, private or protected 文档的访问.使用权限. @access private 表明这个文档是被保护的. @author 张三 <[email protected]> 文档作者 @copyright 名称 时间 文档版权信息 @deprecated version 文档中被废除的方法 @deprec   同 @deprecated @example /path/to/example