`
zkl_1987
  • 浏览: 246783 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

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

<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-permission>


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<Activity> activityStack;
 private static ScreenManager instance;
 private  ScreenManager(){
 }
 public static ScreenManager getScreenManager(){
  if(instance==null){
   instance=new ScreenManager();
  }
  return instance;
 }
//退出栈顶Activity
 public void popActivity(Activity activity){
  if(activity!=null){
   activity.finish();
   activityStack.remove(activity);
   activity=null;
  }
 }
 
//获得当前栈顶Activity
 public Activity currentActivity(){
  Activity activity=activityStack.lastElement();
  return activity;
 }
 
//将当前Activity推入栈中
 public void pushActivity(Activity activity){
  if(activityStack==null){
   activityStack=new Stack<Activity>();
  }
  activityStack.add(activity);
 }
 //退出栈中所有Activity
 public void popAllActivityExceptOne(Class cls){
  while(true){
   Activity activity=currentActivity();
   if(activity==null){
    break;
   }
   if(activity.getClass().equals(cls) ){
    break;
   }
   popActivity(activity);
  }
 }
}






分享到:
评论

相关推荐

    Android学习笔记--通过Application传递数据代码示例

    `Application`类是Android应用的基础,它是每个应用程序的第一个实例,当应用程序启动时,系统会先创建`Application`对象,然后创建其他的组件,如Activity、Service等。由于所有组件都在同一个进程中运行,它们都...

    android实现风蓝记事本

    Android应用程序是基于Java语言的,使用Android SDK(软件开发工具包)进行开发。Eclipse是一款强大的集成开发环境(IDE),它提供了Android开发插件ADT(Android Development Tools),使得开发者可以方便地创建、...

    DrodDraw学习笔记

    - **下载AnDroidDraw.apk**:为了能在真实设备上预览设计好的界面,还需要下载AnDroidDraw这个辅助应用程序。 - **安装AnDroidDraw.apk**:通过命令行工具`adb install AnDroidDraw.apk`将该应用安装到测试用的...

    framework学习笔记

    综上所述,通过对`ps`命令、`debuggerd`守护进程、进程管理、`logcat`工具以及SELinux的理解,我们可以更好地掌握Android系统的基础架构和工作机制,这对于开发高质量的应用程序和优化系统性能具有重要作用。

    android 记事本

    "android 记事本"这个应用程序具备了基本的记事本功能,包括添加、保存、列出笔记,同时支持删除、编辑以及退出操作。作为一个新手作品,这个应用展示了Android开发的基础知识和流程。 1. **Android SDK和环境配置*...

    androidN多屏幕支持例子

    在Android N(API级别24)中,Google引入了一项名为MultiWindow的支持,这使得应用程序能够在设备屏幕上同时显示多个活动窗口。本示例项目“androidN多屏幕支持例子”是针对这一特性的实践应用,旨在帮助开发者理解...

    (1)--HelloWorld

    - **AppDelegate类**:这是应用程序的主要管理类,负责整个应用程序的生命周期管理。其中包括初始化、暂停、恢复等功能。 - **initInstance()**:此函数用于处理不同平台间的适配问题,确保应用程序能在不同设备...

    Android电子书阅读器.rar

    《Android电子书阅读器》是一款专为Android操作系统设计的阅读应用程序,它允许用户在移动设备上轻松地阅读和管理各种格式的电子书籍。这款阅读器不仅提供了舒适的阅读体验,还具备了丰富的功能,旨在满足不同用户的...

    linux笔记(ubuntu)【word格式】

    - **第三方应用程序**:为了满足各种应用需求而开发的应用程序,这些程序运行在Shell之上,可以直接使用或者由用户自行安装。 #### 四、Linux 操作系统版本 - **内核版本**:由Linus Torvalds领导的开发团队负责...

    浮动手机屏幕上的窗口

    浮动窗口技术在移动设备上是一种常见且实用的功能,它允许用户在主屏幕上同时处理多个应用程序,提高多任务处理效率。这种技术尤其适用于那些需要频繁切换应用或者需要在不同应用之间进行快速参考的用户。在标题和...

    appium中文API及笔记(python版)

    Appium 是一个开源自动化测试框架,它允许开发者对原生、混合以及移动Web应用程序进行自动化测试。在Python环境下,Appium 提供了丰富的API接口,使得编写自动化测试脚本更为便捷。本文将深入探讨Appium的中文API...

    在Android上使用多窗口功能来区分

    在Android平台上,多窗口功能是一种独特且强大的特性,允许用户同时操作两个或多个应用程序,显著提高了设备的生产力和用户体验。自Android Nougat (7.0)版本开始,这一功能得到了广泛支持,使得开发者可以为他们的...

    Hundler的笔记

    ### Handler机制详解 ...它不仅简化了多线程编程的复杂度,而且还提高了应用程序的响应速度。开发者只需要关注消息的发送和处理逻辑,而无需关心底层的线程调度细节。这对于Android应用来说是一项非常实用的功能。

    java基础知识整理.doc

    开发者通常需要安装JDK来进行编程工作,而JRE则可供终端用户运行Java应用程序。 下载JDK可以从Oracle官方网站或其他途径获取,安装时应注意避免在路径中使用空格或中文字符。同时,JDK的卸载和安装也是必要的技能。...

    在Delphi中进行指纹仪的二次开发

    这些自定义消息的定义,使得应用程序能够及时响应指纹仪的状态变化,提高用户体验。 4. **资源管理:** 最后,不要忘记在程序退出前调用`uru_Terminate`函数,以断开与指纹仪的连接,释放相关资源,确保程序的稳定...

Global site tag (gtag.js) - Google Analytics