Android利用activity启动模式退出整个应用

作者:翔星幻羽发布于:02月22日 13:39访问(22)评论(0)

Android利用activity启动模式退出整个应用
分类: android开发 2012-07-26 11:32 364人阅读 评论(1) 收藏 举报
前面我们来先看一下目前网上提供的几种方案:
1.退出单个activity
1)、获取当前进程的id,杀死该进程。android.os.Process.killProcess(android.os.Process.myPid())
2)、终止当前正在运行的Java虚拟机方法。System.exit(0);

3)、finish();
4)、杀包方式。
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITYSERVICE);

manager.restartPackage(getPackageName());
添加权限:<uses-permission android:name="android.permission.RESTARTPACKAGES" />;
(在2.2之前可以利用这个退出应用,很遗憾android2.2后失效了,连单个activity都结束不了)

2.退出整个应用(多个Activity)

以下我直接列出网上给出的几种方案,就不做详细说明了。
1)、制造抛异常导致程序强制退出:

2)、用个容器记录每个打开的Activity,在需要退出的时逐一关闭每个Activity

3)、广播方式:

4)、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。

3.接下来看一下怎么利用activity启动模式退出整个应用,在这之前我简单的说下activity四种模式的概念,因为这个退出方法跟 activity的启动模式有一定的关系;

1)、standard 模式;也就是默认模式,每次激活Activity时都会创建一个Activity实例,并放入任务栈中。

2)、singleTop 模式;如果在任务栈中的栈定存在该Activity实例,下次激活该Activity实例时就不会创建新的 Activity的实例,直接重用它(在重用的这个过程中会调用实例的OnNewIntent()这个方法),否则就创建新的Activity实例。

3)、singleTask 模式;如果在栈中已经有该Activity的实例,以后就不会创建新的实例了,而会重用该实例(在重用的这个过程中会调用实例的OnNewIntent()这个方法)。重用时,如果该Activity实例不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。
转自:http://blog.csdn.net/jj120522/article/details/7788306

4)、singleInstance 模式;在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。

在android系统中,要想直接的关闭整个应用,这是不可能的,而在项目中当需要关闭整个应用时几乎都是采用间接的办法,以上列出的几种方案中其原理都是逐一关闭activity(制造抛异常导致程序强制退出除外),然后退出程序。接下来我们也利用这个原理来实现退出整个应用的目的,在activity启动模式singleTask 模式中,刚才提到如果该Activity实例存在但不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。这样子,我们就可以将应用中的主入口Activity(这里假设主Activity为MainActivity)设置成singleTask 模式,这样子我们就保证了这个Activity实例存在于栈底中,后面不管有多少其他Activity实例添加进来它始终会在栈底,这时我们只要在要关闭整个应用的那个Activity中把他转到这个Activity来(startActivity(xx.this,MainActivity.class));这样子其他的activity实例就会被移出栈,这时栈中只剩MainActivity实例,如果此时要是再能让这个MainActivity实例移除出栈,那么我们就达到了关闭整个应用的目的,不知道大家刚才有没有注意到OnNewIntent()这个方法,这个方法就是重用activity实例时会被调用,因此我们只要在MainActivity重写该方法并加上一句finish()来关闭当前activity实例我们的目的就达到了……

package com.test.launchmode;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected final void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
startActivity(new Intent(this,xx.class));
}

@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
this.finish();
}
}1.内容

声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: 翔星幻羽

原文地址: http://my.eoe.cn/xiangxinghuanyu/archive/958.html

Android利用activity启动模式退出整个应用相关推荐

  1. Android中Activity启动模式

    Android中Activity启动模式一共是四种,这里我写一下我对其的理解: 1.standard(默认) 2.singleTop,如果某个Activity设置了该属性,且当前Activity就是这 ...

  2. Android中Activity启动模式详解

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  3. Android activity启动模式

    如何正确理解和使用 Activity的4种启动模式 关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法 ...

  4. Android初级开发笔记-- activity启动模式的学习(1)

    第一次学习Android中一个很重要的概念,启动模式.文章记录的也只是一些入门知识,随着学习的深入还会有activity启动模式的学习(2)和(3). 下面分三个小点说一下对启动模式的理解区别以及如何 ...

  5. Android系统(187)---最易懂的Activity启动模式详解

    Android基础:最易懂的Activity启动模式详解 前言 Android基础中,Activity的启动模式非常重要 本文将全面介绍 Activity的启动模式 目录 目录 1. 定义 即Acti ...

  6. Android Activity 启动模式详解

    最近有群里的朋友问我 Activity的四种启动模式分别是什么意思? 当初因为项目比较忙,草草的解释了下, Api文档中说的也只是一般,在这里就小记一下吧,以便有更多的朋友对Activity启动模式了 ...

  7. Android开发面试题之Activity启动模式讲解总结

    activity启动模式分为: Standard :默认的启动模式每次启动activity都会新建一个activity,不管是否此activity是否存在 SingleTop :栈顶复用模式,每次启动 ...

  8. activity 启动模式_Android世界:Activity的启动模式及其适用范围

    一.Activity启动模式简介 activity启动模式,可以理解为activity在任务栈(也叫"回退栈")的回退规则,即点击"back"键时,activi ...

  9. 深入理解Activity启动模式之大结局

    谈起Activity的启动模式必不可少的要是launchMode.Flags.taskAffinity这三块知识点,上一篇文章 深入理解Activity启动模式之launchMode 看过的同学都知道 ...

最新文章

  1. 从DataView中生成Excel报表的方案(C#)
  2. 远程管理Hyper-V Server 虚拟机
  3. java综合面试题_综合性18道面试官必问经典Java面试题!
  4. mysql proxy 管理_ProxyMySQL的Admin管理接口
  5. C语言试题六十六之请编写函数实现三个数从小到大排序
  6. mysql添加字段时定义候选键_MySQL 表约束
  7. 小试牛刀:文本处理工具之grep、egrep详解
  8. merge into报错ORA-00926、ORA-38014
  9. java数组的初始化方式
  10. 相信阿里只会PPT的“假专家”,随意做数字化转型,活该失败
  11. 使用Selenium定位鼠标悬浮出现的下拉菜单
  12. mysql和timescale联合查询_[技术干货] 时序数据库timescaleDB安装
  13. Windows server 2008设置远程桌面
  14. Excel2010中打开Smartview时报不能设置类Addin的installed属性
  15. 计算机系徽 节徽设计,数学节节徽设计图
  16. ORACLE 11R2 RAC EM 安装日记
  17. CAD贱人工具箱插件免费下载
  18. Leetcode第904题
  19. BERT知识点汇总(en cour...)
  20. [CC2642r1] ble5 stacks 蓝牙协议栈 介绍和理解 TI协议栈下载

热门文章

  1. 导出excel测试-excel行列限制
  2. iphone中的Foursquare集成的实现
  3. CDD数据库文件制作(五)——快照、扩展数据存储
  4. Scanner的next和nextLine
  5. Java关键字super解释
  6. Ubuntu篇——终端操作常用快捷键
  7. [转载]深入理解JavaScript系列 --汤姆大叔
  8. A、B、C、D、E类网络地址
  9. Linux内存空间的分配
  10. getAttribute