深入分析 Android Activity (一)

文章目录

      • [深入分析 Android Activity (一)](#深入分析 Android Activity (一))
        • [1. `Activity` 的窗口管理](#1. Activity 的窗口管理)
        • [2. `Activity` 的生命周期管理](#2. Activity 的生命周期管理)
        • [3. `Activity` 与 `Fragment` 的交互](#3. ActivityFragment 的交互)
          • [添加 Fragment](#添加 Fragment)
          • [Fragment 的生命周期](#Fragment 的生命周期)
        • [4. `Activity` 的任务和返回栈](#4. Activity 的任务和返回栈)
        • [5. 配置变化处理](#5. 配置变化处理)
      • 总结

深入分析 Android Activity (一)

接下来我们会深入分析 Activity 的一些高级特性和内部实现,包括窗口管理、生命周期管理、以及与 Fragment 的交互。

1. Activity 的窗口管理

在 Android 中,每个 Activity 都与一个 Window 相关联。Window 是一个抽象的顶级视图,提供了绘制和事件处理的基本框架。通常情况下,Activity 使用 PhoneWindow 类,它是 Window 的一个具体实现。

当你调用 setContentView 方法时,实际上是通过 Window 设置 Activity 的布局:

java 复制代码
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

PhoneWindow 的实现如下:

java 复制代码
public class PhoneWindow extends Window {
    @Override
    public void setContentView(int layoutResID) {
        // Inflate the layout and add it to the window
        mLayoutInflater.inflate(layoutResID, mContentParent);
    }
}
2. Activity 的生命周期管理

Activity 的生命周期由 Android 系统管理。系统在适当的时候调用 Activity 的生命周期方法,以确保 Activity 能够正确响应用户和系统事件。以下是一些关键的生命周期事件的详细说明:

onCreate

onCreateActivity 被创建时的第一个回调方法。通常在这里进行视图的初始化和数据的加载:

java 复制代码
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Initialize views and data
}
onStart

onStart 方法在 Activity 即将可见时调用。可以在这里执行一些准备操作,比如启动动画等:

java 复制代码
@Override
protected void onStart() {
    super.onStart();
    // Prepare the activity to be visible
}
onResume

onResume 方法在 Activity 即将与用户交互时调用。这里是让 Activity 真正进入前台,并开始交互的地方:

java 复制代码
@Override
protected void onResume() {
    super.onResume();
    // Resume operations that were paused
}
onPause

onPause 方法在系统即将启动另一个 Activity 时调用。在这里可以保存数据和状态,释放资源等:

java 复制代码
@Override
protected void onPause() {
    super.onPause();
    // Save state and release resources
}
onStop

onStop 方法在 Activity 不再可见时调用。这里可以进一步释放资源:

java 复制代码
@Override
protected void onStop() {
    super.onStop();
    // Release more resources
}
onDestroy

onDestroy 方法在 Activity 被销毁前调用。通常用于最后的清理工作:

java 复制代码
@Override
protected void onDestroy() {
    super.onDestroy();
    // Clean up resources
}
onRestart

onRestart 方法在 Activity 从停止状态重新启动前调用。通常用于恢复暂停的操作:

java 复制代码
@Override
protected void onRestart() {
    super.onRestart();
    // Restore state if needed
}
3. ActivityFragment 的交互

FragmentActivity 中的可复用组件,具有自己的布局和生命周期。一个 Activity 可以包含多个 Fragment,每个 Fragment 都可以独立处理用户交互。

添加 Fragment

可以在 Activity 中动态添加 Fragment

java 复制代码
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MyFragment fragment = new MyFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
Fragment 的生命周期

Fragment 的生命周期与 Activity 类似,但有一些额外的方法来处理与 Activity 的交互:

  • onAttach(Activity activity): 当 Fragment 被附加到 Activity 时调用。
  • onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState): 创建并返回 Fragment 的视图层次结构。
  • onActivityCreated(Bundle savedInstanceState): 当 ActivityonCreate 方法已经返回时调用。
  • onDestroyView(): 当 Fragment 的视图层次结构被移除时调用。
4. Activity 的任务和返回栈

Android 使用任务和返回栈(Back Stack)来管理 Activity 的导航。每个任务由一个栈(返回栈)来管理 ActivityActivity 被启动时,会被添加到任务的返回栈中。用户按下返回按钮时,系统会从返回栈中弹出当前的 Activity 并显示前一个 Activity

可以通过 IntentFLAG_ACTIVITY_* 标志来控制任务和返回栈的行为。例如:

java 复制代码
Intent intent = new Intent(this, AnotherActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
5. 配置变化处理

当设备配置发生变化(如屏幕旋转、语言更改等),Activity 会被销毁并重新创建。可以通过 android:configChanges 属性来处理某些配置变化,避免 Activity 的销毁和重建:

xml 复制代码
<activity android:name=".MainActivity"
    android:configChanges="orientation|screenSize">
</activity>

Activity 中覆盖 onConfigurationChanged 方法来处理配置变化:

java 复制代码
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Handle configuration changes
}

总结

Android 的 Activity 设计复杂且强大,提供了管理应用界面和用户交互的丰富功能。通过理解其生命周期、窗口管理、与 Fragment 的交互、任务和返回栈的管理,以及配置变化处理,开发者可以创建高效、响应迅速且用户友好的应用程序。掌握这些知识对于构建稳定和可维护的 Android 应用至关重要。

|----------------------------------|
| 欢迎点赞|关注|收藏|评论,您的肯定是我创作的动力 |

相关推荐
sweetying1 小时前
30了,人生按部就班
android·程序员
用户2018792831672 小时前
Binder驱动缓冲区的工作机制答疑
android
真夜2 小时前
关于rngh手势与Slider组件手势与事件冲突解决问题记录
android·javascript·app
用户2018792831672 小时前
浅析Binder通信的三种调用方式
android
用户092 小时前
深入了解 Android 16KB内存页面
android·kotlin
火车叼位3 小时前
Android Studio与命令行Gradle表现不一致问题分析
android
前行的小黑炭5 小时前
【Android】 Context使用不当,存在内存泄漏,语言不生效等等
android·kotlin·app
前行的小黑炭6 小时前
【Android】CoordinatorLayout详解;实现一个交互动画的效果(上滑隐藏,下滑出现);附例子
android·kotlin·app
用户20187928316718 小时前
Android黑夜白天模式切换原理分析
android
芦半山18 小时前
「幽灵调用」背后的真相:一个隐藏多年的Android原生Bug
android