Android 退出程序的若干方法总结

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());

系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上权限 android.permission.RESTART_PACKAGES

3. 根据Activity的声明周期
3. 我们知道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);
}
}
}

(0)

相关推荐

  • Android开发退出程序的方法汇总

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面我们小编就给大家介绍android开发退出程序的几种方法. 1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方法会执行Activity.onDestroy()方法,结束Activ

  • Android 再按一次返回键退出程序实现思路

    用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dialog中的按钮.个人觉得"再按一次返回键退出程序"是best practice,实现也很简单,直接上代码: 复制代码 代码如下: private long exitTime = 0; @Override public boolean onKeyDown(int keyCode, KeyEve

  • Android双击返回键退出程序的实现方法

    本文实例讲述了Android双击返回键退出程序的实现方法,是Android程序开发中一个非常实用的功能,分享给大家供大家参考之用.具体方法如下: 一.实现思路: 用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态.定时器是每次用户按下返回键才去创建. 二.功能代码: /** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode,

  • Android 双击返回键退出程序的方法总结

    Android 双击返回键退出程序的方法总结 下面先说说LZ思路,具体如下: 1. 第一种就是根据用户点击俩次的时间间隔去判断是否退出程序; 2. 第二种就是使用Android中计时器(Timer),其实这俩种都差不多. 思路是有了,,,接下来要怎么开搞呢???用户点击肯定会触发相应的事件,,,我们先来看下面俩个事件的作用... Activity.onKeyDown(); 当某个键被按下时会触发,但不会被任何的该Activity内的任何view处理. 默认按下KEYCODE_BACK键后会回到上

  • Android 再按一次退出程序的实现方法

    第一种(Handler+标志位) 复制代码 代码如下: private boolean isExit;    private Handler handler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        hand

  • Android 实现按两次返回键退出程序(两种方法)

    Android 实现按两次返回键退出程序(两种方法) 第一种方法: // 是否退出程序 private static Boolean isExit = false; // 定时触发器 private static Timer tExit = null; 第二种方法: public boolean onKeyUp(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isExit == false) {

  • Android Activity 完全结束并退出程序的实例

    关于完全退出Android程序,网上这方面的帖子很多,方法也很多.记得当时自己写的第一个比较完整的项目的时候就遇上了这个问题,由于对Activity的生命周期了解不够,又使用了TabActivity使得层次关系比较复杂,在程序中添加的"退出"菜单项经常无法完全退出,之后网上各种搜索,各种方法也试过了,什么System.exit(0)啊,结束进程之类的啊,都依然无效果.后面才发现的这个方法.思路也很简单,回想自己当初为了解决这个问题时的苦苦寻觅,遂决定将其共享,供遇到此问题人士作为参考.

  • android 退出程序解决内存释放的问题

    做Android项目的时候发现一个问题:当应用程序退出了,点击"设置"查看应用程序,界面显示着可以点击"强制关闭". 我认为造成这样的原因是还有开启的activity没有被destroy,然后做调试,之后发现开启的activity应该是全部都被destroy了.但是结果还是显示可以点击"强制关闭". 由于这个问题我发现了一个更加严重的问题,那就是,在我应用程序退出之后,系统并没有释放掉我应用程序所占内存. 之后在网上查解决办法.说是有两个: 方式

  • android中实现完全退出程序方法(退出所有activity)

    这是一个很多很多人都 会遇到的问题,我也试过了很多方法,都不怎么好用. 比如: 复制代码 代码如下: System.exit(0); 不行. 还有什么跳转到第一个activity,同时把栈顶的activity全部清除,最后再finish();还是不行..不知道为什么. 这里是我自己的一个方法,效果非常好. 原理:在每个activity都注册一个广播接收器,用来接收关闭activity的广播.当需要退出程序的时候就发送一条关闭activity的广播,这样所有的activity都会接收到,然后所有a

  • Android 退出程序的若干方法总结

    Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A.在B中如何关闭整个Android应用程序呢? 本人总结了几种比较简单的实现方法.1. Dalvik VM的本地方法 复制代码 代码如下: android.os.Process.killProcess(android.os.Process.myPid()) //获取PIDSystem.exit(0); //常规java.c#的标准退出法,返回值为0代表正常退出 2. 任务管

  • Android崩溃异常捕获方法

    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面.而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里.但平时使用的时候给你闹崩溃,那你就欲哭无泪了. 那么今天主要讲一下如何去捕捉系统出现的Unchecked异常.何为Unchecked异常呢,换句话说就是指非受检异常,它不能用try-catch来显示捕捉. 我们先从Exception讲起.Exception分为两类:一种是CheckedException,一种是UncheckedException

  • Android AnalogClock简单使用方法实例

    本文实例讲述了Android AnalogClock简单使用方法.分享给大家供大家参考,具体如下: AnalogClock组件的使用很简单,先来看看效果图: AnalogClock组件的使用只需要在布局中指定的显示位置写入此组件即可使用,不需要在java代码中进行实例化. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a

  • 优化Oracle库表设计的若干方法

    正在看的ORACLE教程是:优化Oracle库表设计的若干方法. 前言 绝大多数的Oracle数据库性能问题都是由于数据库设计不合理造成的,只有少部分问题根植于Database Buffer.Share Pool.Redo Log Buffer等内存模块配置不合理,I/O争用,CPU争用等DBA职责范围上.所以除非是面对一个业已完成不可变更的系统,否则我们不应过多地将关注点投向内存.I/O.CPU等性能调整项目上,而应关注数据库表本身的设计是否合理,库表设计的合理性才是程序性能的真正执牛耳者.

  • android获取时间差的方法

    本文实例讲述了android获取时间差的方法.分享给大家供大家参考.具体分析如下: 有些时候我们需要获取当前时间和某个时间之间的时间差,这时如何获取呢? 1. 引用如下命名空间: import java.util.Date; import android.text.format.DateFormat; 2. 设置时间格式: SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 3. 获取时间: Date c

  • Android控制闪光灯的方法(打开与关闭)

    本文实例讲述了Android控制闪光灯的方法.分享给大家供大家参考,具体如下: 最近想做一个手电筒,在网上搜到一点资料 首先闪光灯可以用android.hardware.camera来控制 1. 在Manifest.xml文件中添加权限 复制代码 代码如下: <uses-permission android:name="android.permission.CAMERA" /> 2. 打开闪光灯 try{ m_Camera = Camera.open(); Camera.P

  • Android WebView的使用方法及与JS 相互调用

    Android WebView的使用方法及与JS 相互调用 1.添加网络权限 <uses-permission android:name="android.permission.INTERNET" /> 2.WebSettings 对访问页面进行设置. WebView mWebView = new WebView(this); WebSettings webSettings = mWebView .getSettings();//支持获取手势焦点,输入用户名.密码或其他 m

  • Android onCreateOptionsMenu的使用方法总结

    Android onCreateOptionsMenu的使用方法总结 任何一款软件都少不了对"菜单"的使用.在Android下,每一个activity都捆绑了一个Menu,要想定义和使用菜单,都必须在Activity下进行操作,复写onCreateOptionsMenu 和 onOptionsItemSelected这两个方法.举例如下: @Override public boolean onCreateOptionsMenu(Menu menu) { //调用基类的方法,以便调出系统

  • Android实现屏幕旋转方法总结

    本文实例总结了Android实现屏幕旋转方法.分享给大家供大家参考.具体如下: 在介绍之前,我们需要先了解默认情况下android屏幕旋转的机制: 默认情况下,当用户手机的重力感应器打开后,旋转屏幕方向,会导致当前activity发生onDestroy-> onCreate,这样会重新构造当前activity和界面布局,如果在Camera界面,则表现为卡顿或者黑屏一段时间.如果是在横竖屏UI设计方面,那么想很好地支持屏幕旋转,则建议在res中建立layout-land和layout-port两个

随机推荐