转:http://bbs.51cto.com/thread-970933-1.html  上传一个经测试成功的demo:AllActivtyExit.rar

因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费点功夫了。我是在一个单例对象里面记录activity栈中activity的引用然后在需要退出时遍历一遍finish()掉就可以了。实现步骤如下:
1、创建一个单例对象

package com.exit;

import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;

public class ActivityManager {
         
        private Context context;
         
        private static ActivityManager activityManager;
         
        public static ActivityManager getActivityManager(Context context){
                if(activityManager == null){
                        activityManager = new ActivityManager(context);
                }
                return activityManager;
        }
         
        private ActivityManager(Context context){
                this.context = context;
        }
         
        /**
         * task map,用于记录activity栈,方便退出程序(这里为了不影响系统回收activity,所以用软引用)
         */
        private final HashMap<String, SoftReference<Activity>> taskMap = new HashMap<String, SoftReference<Activity>>();
         
        /**
         * 往应用task map加入activity
         */
        public final void putActivity(Activity atv) {
                taskMap.put(atv.toString(), new SoftReference<Activity>(atv));
        }
         
        /**
         * 往应用task map加入activity
         */
        public final void removeActivity(Activity atv) {
                taskMap.remove(atv.toString());
        }
         
        /**
         * 清除应用的task栈,如果程序正常运行这会导致应用退回到桌面
         */
        public final void exit() {
                for (Iterator<Entry<String, SoftReference<Activity>>> iterator = taskMap.entrySet().iterator(); iterator.hasNext();) {
                        SoftReference<Activity> activityReference =  iterator.next().getValue();
                        Activity activity = activityReference.get();
                        if (activity != null) {
                                activity.finish();
                        }
                }
                taskMap.clear();
        }

}

2、创建自己的根activity,重写onCreate与onDestory

package com.exit;

import android.app.Activity;
import android.os.Bundle;

public class BaseActivity extends Activity {
         
        private ActivityManager manager = ActivityManager.getActivityManager(this);
         
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                manager.putActivity(this);
        }

@Override
        protected void onDestroy() {
                super.onDestroy();
                manager.removeActivity(this);
        }
         
        public void exit(){
                manager.exit();
        }
         
}

3、以后创建的activity都继承这个根activity就可以了,如下:

package com.exit.activitys;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.exit.BaseActivity;
import com.exit.R;

public class ExitActivity extends BaseActivity implements OnClickListener{
         
        private Button start;
         
        private Button exit;
         
        private TextView tipTV;
         
         
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        start = (Button)findViewById(R.id.start_new_activity);
        exit = (Button)findViewById(R.id.exit_all_activity);
        tipTV = (TextView)findViewById(R.id.tip_tv);
        tipTV.setText("activity:"+this.toString());
         
        start.setOnClickListener(this);
        exit.setOnClickListener(this);
    }

@Override
        public void onClick(View v) {
                if(v == start){
                        Intent intent = new Intent(this , ExitActivity.class);
                        startActivity(intent);
                }else if(v == exit){
                        exit();
                }
        }
}

最后是布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
        android:id = "@+id/tip_tv"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<Button android:text="启动新的activity" android:id="@+id/start_new_activity"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
<Button android:text="一次性退出" android:id="@+id/exit_all_activity"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></Button>
</LinearLayout>

Android之多Activity一次性退出相关推荐

  1. Android 编程下 Activity 的创建和应用退出时的销毁

    为了确保对应用中 Activity 的创建和销毁状态进行控制,所以就需要一个全局的变量来记录和销毁这些 Activity.这里的大概思路是写一个类继承 Application,并使获取该 Applic ...

  2. Android UI效果实现——Activity滑动退出效果

    更新说明: 1.在QQ网友北京-旭的提醒下,在SlideFrame的initilize方法中添加了focusable.focusableInTouch.clickable的状态设置,否则会导致部分情况 ...

  3. android 自定义 theme,Android使用Theme自定义Activity进入退出动画的方法

    本文实例讲述了Android使用Theme自定义Activity进入退出动画的方法.分享给大家供大家参考,具体如下: 有没有觉得Activity的默认动画太快了或者太难看了.. 我原来使用Activi ...

  4. android 动画失效,Activity退出动画无效的解决方案

    许多手机的Activity的退出动画失效了,即使调用finish()后执行如下代码也没有用overridePendingTransition(R.anim.activity_open_in_anim, ...

  5. Android开发之Activity转场动画

    引子 相信开发过iOS的程序员都知道iOS ViewController之间的跳转动画非常多,很酷对不对?这让开发Android的羡慕不已,曾几何时,Android中的Activity跳转是何等的生硬 ...

  6. Android四种Activity的加载模式(转)

    建议首先阅读下面两篇文章,这样才可以更好的理解Activity的加载模式: Android的进程,线程模型: http://www.cnblogs.com/ghj1976/archive/2011/0 ...

  7. 【Android笔记】Activity的四种启动模式

    在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity. 可能会希望一个Activity跳转到原来某个Activity实例,而不是产生大量重复 ...

  8. Android之路-------Activity的详解

    前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...

  9. 利用Theme自定义Activity进入退出动画

    有没有觉得Activity的默认动画太快了或者太难看了.. 我原来使用Activity.overridePendingTransition来自定义Activity的进入动画,却发现没法定义退出的动画. ...

最新文章

  1. ubuntu中切换到root账号方法
  2. 动态链表增删改查及排序功能
  3. 生信多组学整合工具的比较研究
  4. 二值神经网络(Binary Neural Networks)最新综述
  5. wxWidgets:wxCaret 示例
  6. 队列实现栈 | 栈实现队列
  7. Css学习总结(4)——CSS选择器总结
  8. 调用企业微信API给用户发消息
  9. 山海经鸿蒙boss疲劳,《山海经》十大奇兽:吃了可缓解各种疑难杂症
  10. 【原创百篇纪念】2048蒙特卡洛法与强化学习测试+B站视频爬取与Cookie攻击测试
  11. 微信小游戏实战--cocos creator实现wordle游戏(二)
  12. 2021年要毕业了,有必要考研吗?工作经验重要还是学历重要 ?
  13. java缓存击穿_对缓存击穿的一点思考
  14. android设置左右声道音量,android控制左右声道实例
  15. 天数最少的年份_年月日格式有哪几种 年、月、日
  16. 深度学习提高泛化能力的技术
  17. 原创 | 既生synchronized,何生volatile?!
  18. 【豆瓣】爬取评论(影评、书评)
  19. 保险 -- 雪中送炭的投资
  20. [Visual Studio 2022 C#]使用SplitContainer拆分器让一个Windows窗口秒变多个

热门文章

  1. 语义分割领域开山之作:Google提出用神经网络搜索实现语义分割
  2. open AI 在DOTA 5v5 比赛中战胜职业选手
  3. JVM基础系列第7讲:JVM 类加载机制
  4. 随笔 | 抢红包不是一件小事
  5. Windows环境 安装dlib cv2(python) 总结
  6. nodejs安装及npm模块插件安装路径配置
  7. Java Web的Maven项目中Properties文件的使用
  8. 2016012017+小学四则运算练习软件项目报告
  9. 尾田荣一郎参与制作!两部《海贼王》VR游戏正在开发中
  10. C# 类型实例化的语法糖--unity下诡异结果