• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
三三三
博客园    首页    新随笔    联系   管理    订阅  订阅

Activity初见-生命周期

目录

1、Activity生命周期简介

2、start 一个 Activity

3、创建一个新实例

4、销毁Activity

摘要

内容

1、Activity生命周期简介

     

               在Activity的生命周期中,系统会按类似于阶梯金字塔的顺序调用一组核心的生命周期方法。 也就是说,Activity生命周期的每个阶段就是金字塔上的一阶。 当系统创建新Activity实例时,每个回调方法会将Activity状态向顶端移动一阶。 金字塔的顶端是Activity在前台运行并且用户可以与其交互的时间点。

当用户开始离开Activity时,系统会调用其他方法在金字塔中将Activity状态下移,从而销毁Activity。 在有些情况下,Activity将只在金字塔中部分下移并等待(比如,当用户切换到其他应用时),Activity可从该点开始移回顶端(如果用户返回到该Activity),并在用户停止的位置继续。

             

  • 如果用户在使用您的应用时接听来电或切换到另一个应用,它不会崩溃。
  • 在用户未主动使用它时不会消耗宝贵的系统资源。
  • 如果用户离开您的应用并稍后返回,不会丢失用户的进度。
  • 当屏幕在横向和纵向之间旋转时,不会崩溃或丢失用户的进度。

 

             正如您将要在以下课程中要学习的,有Activity会在图 1 所示不同状态之间过渡的几种情况。 但是,这些状态中只有三种可以是静态。 也就是说,Activity只能在三种状态之一下存在很长时间。

继续
在这种状态下,Activity处于前台,且用户可以与其交互。(有时也称为“运行”状态。)
暂停
在这种状态下,Activity被在前台中处于半透明状态或者未覆盖整个屏幕的另一个Activity—部分阻挡。 暂停的Activity不会接收用户输入并且无法执行任何代码。
停止
在这种状态下,Activity被完全隐藏并且对用户不可见;它被视为处于后台。 停止时,Activity实例及其诸如成员变量等所有状态信息将保留,但它无法执行任何代码。

其他状态(“创建”和“开始”)是瞬态,系统会通过调用下一个生命周期回调方法从这些状态快速移到下一个状态。 也就是说,在系统调用 onCreate() 之后,它会快速调用 onStart(),紧接着快速调用 onResume()。

基本生命周期部分到此为止。现在,您将开始学习特定生命周期行为的一些知识

 

 

2、start 一个 Activity

 

             当用户从主屏幕选择您的应用图标时,系统会为您已声明为“启动器”( 或“主要”)Activity的应用中的 Activity 调用 onCreate() 方法。 这是作为 您的应用的用户界面主入口的Activity。

您可以在 Android 宣示说明文件中 AndroidManifest.xml 定义哪个Activity用作主Activity,该说明文件位于您项目目录的根目录中。

您的应用的主Activity必须使用 <intent-filter>(包括 MAIN 操作和 LAUNCHER 类别)在宣示说明中声明。例如:

<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>
View Code

    注意:当您使用 Android SDK工具创建新 Android 项目时,默认的项目文件包括使用过滤器在宣示说明中声明的 Activity 类。

如果未对您的Activity之一声明 MAIN 操作或 LAUNCHER 类别,那么您的应用图标将不会出现在应用的主屏幕列表中。

 

 

3、创建一个新实例

 

             大多数应用包含若干个不同的Activity,用户可通过这些Activity执行不同的操作。无论Activity是用户单击您的应用图标时创建的主Activity还是您的应用在响应用户操作时开始的其他Activity,系统都会通过调用其 onCreate() 方法创建 Activity 的每个新实例。

您必须实现 onCreate() 方法执行只应在Activity整个生命周期出现一次的基本 应用启动逻辑。例如,您的 onCreate() 的实现应定义用户界面并且可能实例化某些类范围变量。

例如,onCreate() 方法的以下示例显示执行Activity某些基本设置的一些代码,比如声明用户界面(在 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);
    }
View Code

 

       一旦 onCreate() 完成执行操作,系统会相继调用 onStart() 和 onResume() 方法。 您的Activity从不会驻留在“已创建”或“已开始”状态。在技术上,Activity会在 onStart() 被调用时变得可见,但紧接着是 onResume(),且Activity保持“继续”状态,直到有事情发生使其发生变化,比如当接听来电时,用户导航至另一个Activity,或设备屏幕关闭。

在接下来的其他课程中,您将看到其他Activity如何启动方法,当用于从“暂停”或“停止”状态继续Activity时,onStart() 和 onResume() 在您的Activity生命周期中特别有用。

注意:onCreate() 方法包括一个称为 savedInstanceState 的参数,将在有关重新创建Activity的后续课程中讨论该参数。

 

 

4、销毁Activity

 

当Activity的第一个生命周期回调是 onCreate() 时,它最近的回调是 onDestroy()。系统会对您的Activity调用此方法,作为您的Activity实例完全从系统内存删除的最终信号。

大多数应用不需要实现此方法,因为本地类引用与Activity一同销毁,并且您的Activity应在 onPause() 和 onStop() 期间执行大多数清理操作。 但是,如果您的Activity包含您在 onCreate() 期间创建的后台线程或其他如若未正确关闭可能导致内存泄露的长期运行资源,您应在 onDestroy() 期间终止它们。

 

@Override
public void onDestroy() {
    super.onDestroy();  // Always call the superclass
    
    // Stop method tracing that the activity started during onCreate()
    android.os.Debug.stopMethodTracing();
}
View Code

 

 

 

当Activity的第一个生命周期回调是 onCreate() 时,它最近的回调是 onDestroy()。系统会对您的Activity调用此方法,作为您的Activity实例完全从系统内存删除的最终信号。

大多数应用不需要实现此方法,因为本地类引用与Activity一同销毁,并且您的Activity应在 onPause() 和 onStop() 期间执行大多数清理操作。 但是,如果您的Activity包含您在 onCreate() 期间创建的后台线程或其他如若未正确关闭可能导致内存泄露的长期运行资源,您应在 onDestroy() 期间终止它们。

花絮

 

posted @ 2016-01-15 17:00  三三三  阅读(145)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3