Android Activity启动流程

一、Activity概述

Android应用程序是由许多Activity组成的。一个Activity代表一个屏幕上的窗口。用户与应用程序交互时,Activity会接收用户的输入并处理屏幕输出。Activity的启动流程是Android应用程序中至关重要的一个环节。

二、Activity的生命周期

一个Activity的生命周期可以分为四个阶段:

1. 创建阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
}

在创建阶段中,首先调用了onCreate()方法。在这个方法中,我们可以初始化Activity,比如设置布局文件、获取控件等。

2. 运行阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }
}

在运行阶段中,Activity已经准备好了。在Activity变成前台窗口之前,onStart()方法会被调用,在Activity变成前台窗口之后,onResume()方法会被调用。

3. 暂停阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Activity 进入后台
    }
}

在暂停阶段中,onPause()方法会被调用。在这个方法中,我们可以保存一些需要持久化的数据,比如用户输入的内容。

4. 停止阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }

    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }

    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }

    @Override
    protected void onPause() {
        super.onPause();
        // Activity 进入后台
    }

    @Override
    protected void onStop() {
        super.onStop();
        // Activity 被停止
    }
}

在停止阶段中,onStop()方法会被调用。在这个方法中,我们可以释放一些资源。

三、Activity之间的跳转

在Android应用程序中,Activity之间的跳转是非常普遍的。Activity之间的启动方式有两种:

1. 显式启动

Intent intent = new Intent(this, MyActivity.class);
startActivity(intent);

上述代码中,我们使用了一个Intent对象,将要启动的Activity的类名传递给了Intent对象。然后调用startActivity()方法来启动Activity。

2. 隐式启动

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

这里我们使用了一个Intent对象,并将其设置为ACTION_VIEW类型,同时将一个Uri对象传递给了Intent对象。系统会根据Uri的Scheme、Type、Category等属性,匹配到适合的Activity来启动。

四、Activity启动流程

在一个Activity启动另一个Activity时,系统必须执行以下操作:

1. 创建要启动的Activity对象

系统会根据Intent指定的类名,使用Java反射机制创建一个Activity对象。

2. 构建要启动的Activity的环境

系统会调用ActivityThread的handleLaunchActivity()方法,来构建要启动的Activity的环境。

final ActivityClientRecord r = new ActivityClientRecord();
r.token = appToken;
r.ident = ident;
r.intent = intent;
r.isProfiling = (flags&Profiler.FLAG_PROFILING)!=0;
...
Activity a = performLaunchActivity(r, customIntent);

3. 调用onCreate()方法

系统会调用Activity的onCreate()方法,来进行一些初始化工作。

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
}

4. 加载布局文件

系统会解析布局文件,并将解析后的视图加入到Activity的View树中。

setContentView(R.layout.activity_my);

5. 构建OptionsMenu

如果Activity需要显示OptionsMenu,系统会调用Activity的onCreateOptionsMenu()方法,来构建要显示的Menu。

public class MyActivity extends Activity {
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_my_menu, menu);
        return true;
    }
}

6. 生命期回调方法

系统会依次调用Activity的各个生命期回调方法,包括onStart()、onResume()、onPause()、onStop()、onDestroy()等。

五、总结

Android应用程序中Activity是核心组件之一,它的启动流程至关重要。本文对Activity的生命周期、Activity之间的跳转以及Activity的启动流程进行了详细阐述。

原创文章,作者:WZRPK,如若转载,请注明出处:https://www.506064.com/n/372878.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WZRPKWZRPK
上一篇 2025-04-25 15:26
下一篇 2025-04-25 15:26

相关推荐

  • Android ViewPager和ScrollView滑动冲突问题

    Android开发中,ViewPager和ScrollView是两个常用的控件。但是当它们同时使用时,可能会发生滑动冲突的问题。本文将从多个方面介绍解决Android ViewPa…

    编程 2025-04-28
  • Android如何点击其他区域收起软键盘

    在Android应用中,当输入框获取焦点弹出软键盘后,我们希望能够点击其他区域使软键盘消失,以提升用户体验。本篇文章将说明如何实现这一功能。 一、获取焦点并显示软键盘 在Andro…

    编程 2025-04-28
  • Python爬虫流程用法介绍

    本文将介绍Python爬虫的流程,包括数据采集、数据处理以及数据存储等方面。如果想要使用Python爬取网站数据,本文将为您提供详细的指导和实例。 一、数据采集 1、确定目标网站 …

    编程 2025-04-27
  • Java项目Git发布流程规范

    本文旨在介绍Java项目在使用Git进行发布时的流程规范。Git作为一个版本控制工具,其功能十分强大,但是对于Java项目进行发布时,需要我们根据标准化的流程规范来执行操作,以确保…

    编程 2025-04-27
  • Android Studio HUD 实现指南

    本文将会以实例来详细阐述如何在 Android Studio 中使用 HUD 功能实现菊花等待指示器的效果。 一、引入依赖库 首先,我们需要在 build.gradle 文件中引入…

    编程 2025-04-27
  • Android和Vue3混合开发方案

    本文将介绍如何将Android和Vue3结合起来进行混合开发,以及其中的优势和注意事项。 一、环境搭建 在进行混合开发之前,需要搭建好相应的开发环境。首先需要安装 Android …

    编程 2025-04-27
  • Android Java Utils 可以如何提高你的开发效率

    Android Java Utils 是一款提供了一系列方便实用的工具类的 Java 库,可以帮助开发者更加高效地进行 Android 开发,提高开发效率。本文将从以下几个方面对 …

    编程 2025-04-27
  • xmake qt:构建Qt应用的全流程解决方案

    本文将会详细阐述xmake qt的使用方法以及其能够解决的问题。针对Qt应用开发中的各种困境,xmake提供了一整套的解决方案,包括自动构建、依赖管理、部署打包等,极大地提高了开发…

    编程 2025-04-27
  • Android JUnit测试完成程序自动退出决方法

    对于一些Android JUnit测试的开发人员来说,程序自动退出是一个经常面临的困扰。下面从多个方面给出解决方法。 一、检查测试代码 首先,我们应该仔细检查我们的测试代码,确保它…

    编程 2025-04-25
  • Android单元测试详解

    一、单元测试概述 单元测试是指对软件中的最小可测试单元进行检查和验证。在Android开发中,单元测试是非常重要的一环,可以保证代码的质量、稳定性以及可维护性。 在Android开…

    编程 2025-04-25

发表回复

登录后才能评论