简体中文简体中文
EnglishEnglish
简体中文简体中文

深入剖析Activity源码:揭开Android

2025-01-20 14:57:07

在Android应用开发过程中,Activity作为四大组件之一,承载着用户交互、界面展示等重要任务。深入了解Activity的源码,有助于我们更好地掌握Android应用开发的核心原理。本文将带领读者一起走进Activity的源码世界,揭开Android应用开发的神秘面纱。

一、Activity简介

Activity是Android应用开发中最常用的组件之一,用于实现用户界面和交互。一个Activity通常对应一个屏幕,用户可以与之进行交互。Activity具有以下特点:

1.可见性:Activity在屏幕上显示,用户可以与之交互。 2.可管理性:Activity可以被Android系统管理,如启动、暂停、恢复等。 3.生命周期:Activity具有生命周期,包括创建、启动、暂停、停止、销毁等状态。

二、Activity源码结构

Activity源码位于Android源码的frameworks/base/services/core/java/com/android/server包下。主要类包括:

1.ActivityThread:负责Activity的生命周期管理。 2.Activity:表示Activity实例。 3.ActivityStackSupervisor:管理Activity栈。 4.ActivityStack:Activity栈的具体实现。 5.TaskRecord:表示一个任务,包含一组Activity。

三、Activity生命周期

Activity的生命周期包括以下几个阶段:

1.onCreate():创建Activity时调用,初始化Activity。 2.onStart():Activity可见时调用,开始与用户交互。 3.onResume():Activity获得焦点时调用,开始与用户交互。 4.onPause():Activity失去焦点时调用,暂停与用户交互。 5.onStop():Activity不可见时调用,停止与用户交互。 6.onDestroy():销毁Activity时调用,释放资源。

以下为Activity生命周期关键方法的源码解析:

1.onCreate()方法:

java public void onCreate(Bundle savedInstanceState) { // ...省略其他代码... if (mWindow == null) { mWindow = PolicyManager.makeNewWindow(this); mWindow.setCallback(this); mWindow.setOnWindowDismissedCallback(new Runnable() { public void run() { ActivityManagerNative.getDefault().finishActivity( Token.fromToken(mToken), 0, 0, 0, true, false, false, false, 0, null, false); } }); mWindow.setType(mWindowType); mWindow.setPrivateFlags(privateFlags); if (mWindowManager != null) { mWindowManager.addView(mWindow, new WindowManager.LayoutParams( LayoutParams.TYPE_BASE_APPLICATION, mWindow.getLayoutFlags(), mWindow.getOwnerActivity() == null ? mUserId : mOwnerActivity.getUid(), mWindow.getLayoutInDisplayCutoutMode(), mWindow.getLayoutInScreenBoundsMode(), mWindow.getLayoutInS_decimalDegrees(), 0, 0, 0, 0)); } // ...省略其他代码... } }

2.onResume()方法:

java public void onResume() { // ...省略其他代码... ActivityStackSupervisor resumedActivity = mResumedActivity; if (resumedActivity != this) { if (DEBUG) Slog.v(TAG, "Resuming from " + resumedActivity); resumedActivity.performPause(); ActivityStack stack = resumedActivity.getStack(); if (stack != null) { stack.removeResumedActivity(resumedActivity); } resumedActivity = null; } if (DEBUG) Slog.v(TAG, "Resuming " + this); mResumedActivity = this; // ...省略其他代码... }

四、总结

通过分析Activity源码,我们可以了解到Activity的生命周期、创建、显示等关键过程。掌握Activity源码,有助于我们更好地优化Android应用性能,提高开发效率。在今后的开发过程中,我们可以结合源码,深入挖掘Android应用开发的奥秘。