原文来自:http://www.cnblogs.com/jh5240/archive/2011/11/09/2243734.html
方法A:
1.5版本到2.1版本的退出方法是
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("包名");
2.2版本必须把后台数据清空了:
步骤1:
/**
* activityList:所有activity对象,用于退出时全部finish; Activity走onCreate时,添加到该集合
*/
public static List<Activity> activityList = new ArrayList<Activity>();
步骤2:
/**
* 页面初始化
*
* @param savedInstanceState
*/
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
activityList.add(this);
步骤3:
/**
* 退出客户端。
*
* @param context 上下文
*/
public static void exitClient(Context context)
{
Log.d(TAG, "----- exitClient -----");
// 关闭所有Activity
for (int i = 0; i < activityList.size(); i++)
{
if (null != activityList.get(i))
{
activityList.get(i).finish();
}
}
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityManager.restartPackage("包路径");
System.exit(0);//Android的程序只是让Activity finish()掉,而单纯的finish掉,退出并不完全
}
这里要加System.exit(0);
还要记得加权限
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
方法B:
android.os.Process.killProcess(android.os.Process.myPid());
归纳起来四种方法:
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上权限
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
startActivity(intent);
接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:
public class ScreenManager {
private static Stack activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
activityStack=new Stack();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
break;
}
break;
}
popActivity(activity);
}
}
}
分享到:
相关推荐
有一种需要,我们在菜单项中点击退出应用程序,应用程序就退出,不需要回到MainActivity设计:有两个应用界面MainActivity和BActivity,以及用于程序的通用类ExitUtil ... } // 完全退出应用程序 p
学习了android程序的运行过程。一个进程创建时系统会为它创建一个Activity(活动),紧接着调用onCreate(),onCreate()中主要是进行一些初始化,例如读取XML资源文件创建布局,设置主界面各种监听函数等等,每个进程...
因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费点功夫了。我是在一个单例对象里面记录activity栈中activity的引用然后在需要退出时遍历一遍finish()掉就可以了。...
Android Robot专门为移动设备生产商,移动应用程序开发商设计,能够帮助他们在产品上市之前发现死机,异常退出等问题。AndroidRobot几乎近乎完美的模拟人的所有行为进行测试,就像手工操作手机一样,准确无误的录制...
通过综合训练,要 " "求学生掌握android的网络编程和3G编程的应用,并较系统地掌握JAVA语言 " "程序设计开发方法以及帮助文件的使用等,使学生通过本次实训,能够进行" "独立的3G应用程序开发,能够在实际操作中得到...
此文件安装过后本机即是服务器,本机与本机可以交互; 一、针对本机作为服务器; 步骤: ...即可在下方输入内容,返送; ... 如本机非服务器,要先打开服务端手机的服务,再连接,否则程序异常退出;
退出:退出应用程序。 2.步检测器活动: 当用户单击“主要活动”中的“开始步骤计数”按钮时,将显示“步骤检测器活动”。 该活动包含: 英寸/步长:此文本视图显示的右边是空白的编辑视图,用户需要在其中输入将...
通过提交来归档发现的所有错误: 设备信息复制步骤观察到的行为(如果可能,包括屏幕截图/视频) 预期行为(可选) 加入,查看最新消息并与其他贡献者和核心团队讨论反馈您可以随时退出Beta测试计划: 在Android设备...
1.使用命令行时,当转某个类失败时将继续,而不退出程序 2.解决读取class annotation 的一个问题 Fixes issue 42 3.rename package pxb.android.dex2jar to com.googlecode.dex2jar 4.issue 33, issue 43在启动...
如果在第一个界面中点击系统的menu按钮,则会自动弹出一个菜单,菜单栏包括退出和关于2个按钮,点击退出按钮,则退出了该程序。实验说明:1. 第1个activity的步骤大概如下:创建一个监听器。创建一个intent,并将...
酷炫的锁屏页面(圆形搜索栏),定时退出(定时歌曲数退出,定时时间段退出,定时时间点退出),炫彩可视化音乐之圆形频谱(使用了渐变色,思路来源自系统属性动画),富有节奏感的可视化音乐之声频谱球(捕捉的是重...
TcStatInterface是自定义统计SDK,完全放弃第三方平台,让app拥有自主的数据统计功能,支持页面统计 自定义事件统计 APP启动退出统计,不同渠道统计。客户端SDK功能概述在使用统计服务前,开发者先要拿到本身APPID。...
具有上的Android上的非官方。 安装 : 您还至少需要安装节点12。 全局安装: npm i code-server -g 在安装应用程序(或自行编译) 用法 : 跑步 每当您想使用VSCode时,都应该执行此步骤。 如果不想验证,请...
水槽 Sink是一个应用程序,可... 但是,这不会使该应用程序完全正常运行。 您会注意到您无法通过注册屏幕-该应用程序将崩溃。 这是因为该应用程序希望启用电子邮件身份验证。 实际上,该应用程序希望进行以下设置: Fir
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> 4.在代码中执行打开扫描二维码界面操作 Intent intent = new ...
简介一年多以前,Android平台曾经出现过三个流行的TI计算器模拟器软件,分别包括TI-83、TI-85、TI-86,让许多用户大为欣喜,不过因为这些软件...注意:关闭软件方法,按住2nd键不放,再按ON键,然后放开手指即可退出软件
Sisulizer 4.0是一款软件本地汉化工具,它可以为你的软件提供多种语言支持,只需要几个简单的步骤就能够将软件本地化,首先程序会扫描应用程序,然后使用可视化的编辑工具进行语言翻译,最后创建本地化软件版本。...
AutoLatch 可以在您退出时自动阻止您的应用程序,因为当您的智能手机与您家中的无线网络断开连接或从您的住所获取 GPS 坐标时,我们可以预期您已外出,然后您无需启用对该应用程序的访问.汇编编译要求是➢ 下载 ...
LO https://raw.githubusercontent.com/Hax4us/TermuxAlpine/master/TermuxAlpine.sh 执行脚本bash TermuxAlpine.sh 开始高山startalpine 对于退出,只需执行exit首次使用的步骤(推荐) 更新Alpine apk update 现在...