Android 关闭多个Activity的实现方法
Android 关闭多个Activity的实现方法 总的来说有四种方法: 1、使用Application来进行关闭 public class App extends Application { private static List<Activity> lists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static void clearActivity() { if (lists != n 在Android应用开发中,有时需要关闭多个Activity,例如在退出应用时。以下是对四种常见的关闭多个Activity的方法的详细解释: 1. **使用Application类管理Activity**: 创建一个自定义的`Application`类,如`App`,并维护一个`Activity`的列表。每当新的`Activity`启动时,将其添加到列表中。在需要关闭所有`Activity`时,遍历列表并调用每个`Activity`的`finish()`方法,随后清空列表。这样可以确保所有已添加的`Activity`都被关闭。 ```java public class App extends Application { private static List<Activity> lists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static void clearActivity() { if (lists != null) { for (Activity activity : lists) { activity.finish(); } lists.clear(); } } } ``` 然后,为所有`Activity`创建一个基类,例如`BaseActivity`,在它的构造函数中调用`App.addActivity(this)`。 2. **使用广播进行关闭**: 创建一个基类`BaseActivity`,在`onCreate()`方法中注册一个广播接收器,监听特定的广播动作,例如`R.string.promotion_action`。在`onDestroy()`方法中取消注册。当需要关闭所有`Activity`时,发送这个广播。例如,从一个特定的`Activity`调用: ```java // 销毁所有的Activity // 关闭本窗口 getActivity().finish(); // 关闭父窗口 if (getActivity().getParent() != null) { getActivity().getParent().finish(); } // 发送广播关闭其他Activity Intent intent = new Intent(); intent.setAction(getString(R.string.promotion_action)); getActivity().sendBroadcast(intent); ``` 3. **利用onActivityResult递归调用来关闭Activity**: 在基类`BaseActivity`中重写`onActivityResult()`方法,当`resultCode`等于预设的关闭标识(如`RESULT_CLOSE`)时,调用`finish()`。然后在需要关闭的`Activity`中调用`setResult(RESULT_CLOSE)`。 ```java public class BaseActivity extends AppCompatActivity { protected final static int RESULT_CLOSE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_CLOSE) { setResult(RESULT_CLOSE); finish(); } } } ``` 4. **利用Intent的Flags关闭Activity**: Android的`Intent`有多种启动模式(LaunchMode),它们影响了`Activity`的生命周期。例如,`FLAG_ACTIVITY_CLEAR_TOP`会清除栈上所有位于目标`Activity`之上的`Activity`。如果你想关闭所有`Activity`并返回到栈顶的某个特定`Activity`,可以在创建`Intent`时设置这个Flag。 ```java Intent intent = new Intent(this, TargetActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); ``` 在这里,`TargetActivity`是你希望回到的`Activity`。 这些方法各有优缺点,开发者应根据应用的具体需求选择合适的方法。例如,使用`Application`管理可能更方便,但需注意内存泄漏;广播方式灵活,但可能涉及广播生命周期问题;`onActivityResult`方式简单,但可能导致不必要的回调;而`Intent`的Flags则适用于特定的场景。在实际开发中,还可以结合使用这些方法,以达到最佳效果。



















- 粉丝: 5
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 改进下垂控制与微电网控制方向下的负载与储能系统仿真研究
- 离线iP库 输入IP地址立即返回IP所在地址信息(支持Java、Python)包含: GeoLite2-City.mmdb GeoLite2-ASN.mmdb
- Maxwell与OptiStruct联合仿真:多目标优化在电动系统关键性能指标中的应用
- 永磁同步电机矢量控制Matlab仿真:双闭环与前馈补偿下的波形表现优秀 - 前馈补偿 高级版
- 电力电子技术中三相可控整流电路设计与仿真的关键技术及应用 · 三相可控整流 v3.0
- 永磁同步电机退磁与温磁双向耦合分析——基于Workbench平台的Maxwell&Fluent实操教程
- 量产车型BMS软件设计详解:碰撞检测、采样处理与多模块功能管理 · 故障诊断 (07月28日)
- 基于博途1200PLC与HMI的水塔水位自动控制系统仿真及其应用
- 基于springboot“智慧食堂”系统设计与实现coder.zip
- 光子晶体光纤与石墨烯-黑磷增强SPR等离子体谐振传感关键技术研究 黑磷
- 光伏系统中三路Boost交错并联技术的C语言实现及仿真分析
- COMSOL多极分解技术在石墨烯电磁场与光学仿真的应用研究
- 电力电子领域中正负序PLL锁相环算法在华为与阳光电源DSP芯片中的应用及C语言实现 C语言
- mmdbIP库文件资源
- 混凝土细观单轴受压与受拉模拟的复现研究——基于太原理工大学硕士论文的方法与结果
- 基于Matlab Robotic Toolbox的四轴机械臂建模与运动控制仿真研究



评论0