Android组件之Activity知识点梳理

前言:最近在从头复习Android相关的知识,所谓温故而知新,每天会整理一些笔记分享出来,希望能帮到有需要的人。

一、Activity是什么?

Activity是Android四大组件(Activity、Service、BroadcastReceiver、ContentProvider)中的核心组件,代表应用中的一个独立界面。每个Activity提供用户交互的窗口,类似于桌面应用的窗体概念。Android应用通常由多个Activity组成,它们通过任务栈(Task Stack)管理,形成用户导航的返回栈。

二、常用场景

  1. 主界面展示:应用启动时的首个交互界面
  2. 页面跳转:用户操作触发的界面切换(如列表→详情页)
  3. 数据采集:表单填写、用户登录等交互场景
  4. 多窗口适配:分屏模式、自由窗口等响应式设计

三、核心知识点

1. 生命周期(核心)
typescript 复制代码
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("Lifecycle", "onCreate"); // 初始化界面
    }

    @Override
    protected void onStart() {
        super.onStart(); // 界面可见
        Log.d("Lifecycle", "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume(); // 获取焦点,可交互
        Log.d("Lifecycle", "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause(); // 失去焦点(如弹出对话框)
        Log.d("Lifecycle", "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop(); // 完全不可见
        Log.d("Lifecycle", "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy(); // 被销毁前资源释放
        Log.d("Lifecycle", "onDestroy");
    }
}
2. 启动方式
scss 复制代码
// 显式启动
Intent intent = new Intent(MainActivity.this, DetailActivity.class);
startActivity(intent);

// 隐式启动(需在AndroidManifest中声明intent-filter)
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.example.com"));
startActivity(intent);

// 带返回值启动
startActivityForResult(intent, REQUEST_CODE);

// 使用Activity Result API 启动
// 注册结果监听器
ActivityResultLauncher<Intent> launcher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK) {
            Intent data = result.getData();
            // 处理返回数据
        }
    }
);

// 启动目标Activity
launcher.launch(new Intent(this, DetailActivity.class));
3. 数据传递
scss 复制代码
// 发送数据
Intent intent = new Intent(this, DetailActivity.class);
intent.putExtra("USER_NAME", "AndroidDev");
intent.putExtra("USER_ID", 1001);
startActivity(intent);

// 接收数据(在DetailActivity中)
String name = getIntent().getStringExtra("USER_NAME");
int id = getIntent().getIntExtra("USER_ID", 0);

// 返回结果
Intent resultIntent = new Intent();
resultIntent.putExtra("RESULT_DATA", "操作成功");
setResult(RESULT_OK, resultIntent);
finish();
4. 启动模式(AndroidManifest配置)
  • 一种是在AndroidManifest.xml文件中的activity节点中设置android:launchMode属性
xml 复制代码
<activity
    android:name=".MainActivity"
    android:launchMode="singleTop"> <!-- 四种模式 -->
</activity>

standard:默认模式,每次启动创建新实例

singleTop:栈顶复用(防止重复打开)

singleTask:栈内复用(适合主界面)

singleInstance:独立栈(系统级应用)

  • 一种就是通过在开启Activity的时候,通过设置Intent Flag来设置
ini 复制代码
Intent intent=new Intent(this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

1. FLAG_ACTIVITY_SINGLE_TOP(同singleTop)

2. FLAG_ACTIVITY_CLEAR_TOP(同singleTask)

3. FLAG_ACTIVITY_NO_HISTORY

  • 新活动不会保留在历史栈中,一旦用户切换到其他页面,新活动会马上销毁。
  • 旧活动的onActivityResult()方法永远不会被触发。

4. FLAG_ACTIVITY_NEW_TASK(同singleInstance)

四、整理的一部分面试题

1:onSaveInstanceState() 何时调用?与onPause()的区别?

  • 调用时机:Activity被异常销毁前(如屏幕旋转、内存不足)

  • 区别:

    • onPause():任何失去焦点时都调用
    • onSaveInstanceState():只在非用户主动关闭时触发
  • 典型用途:保存临时数据(EditText内容等)

2:Activity A启动B时生命周期变化?

A.onPause() → B.onCreate() → B.onStart() → B.onResume() → A.onStop()

注意:旧Activity的onPause()执行完成后,新Activity才会创建

3:如何避免Activity内存泄漏?
  1. 避免非静态内部类(改用静态内部类+WeakReference)
  2. 及时注销监听器(onDestroy中解除广播、Handler等)
  3. 谨慎使用Context(ApplicationContext优先)
  4. 避免在Activity中保存大数据
4:singleTask和singleInstance的区别?
特性 singleTask singleInstance
任务栈 可与其它Activity同栈 独占新栈
多应用共享 不支持 支持(如系统相机调用)
常见场景 应用主界面 系统级功能(分享菜单)
相关推荐
ZZH_AI项目交付1 天前
我把 AI 最容易改坏真实 App 的地方,整理成了 skills
人工智能·ios·app
YF02111 天前
Android 异形屏与横屏全屏沉浸式适配技术方案
android·app
曦月合一3 天前
语音识别网页版转化成APP版
app·语音识别·谷歌浏览器
私人珍藏库4 天前
【Android】Solid文件管理器3.5.2 安卓文件管理器
android·人工智能·app·工具·软件·多功能
YF02115 天前
深入剖析 Kotlin 的高效之道与核心实战
android·kotlin·app
私人珍藏库6 天前
【Android】小小最新AI--千变万化扮演任何角色--沉浸式互动
android·app·工具·软件·多功能
YF02116 天前
Android App 高效升级指南:OkDownload 多线程断点续传与全版本安装适配
android·okhttp·app
木风未来8 天前
四川 APP 开发企业排名
小程序·app·软件开发·app开发
洲洲不是州州9 天前
单片机onenet云平台的万能APP
单片机·onenet·app·嵌入式·云平台
私人珍藏库11 天前
[Android] 哔哩哔哩第三方安卓电视TVapp BV_0.3.16.r898
android·app·工具·软件·多功能