android开发之关闭所有的activity的方法

当app中打开了多个activity的时候,由于进入的比较深,所以,很多app不得不让用户一步一步退回到第一个界面(MainActivity),在一步一步退回的时候,逐个释放。

今天写kotlin来实现,在任意位置,直接退出应用的方法。

首先,每当打开一个 activity 的时候,需要有一个地方做记录,以便让一个循环遍历代码释放所有使用过的 activity 资源。

那么,建立一个数组。这里使用 MutableList,因为它有 add 和 remove 方法,很好用。

var activities:MutableList<Activity> = arrayListOf()

这个数组就是用来记录当前打开了多少个 activity 的。

那么每次打开一个新的 activity 就需要执行一个添加到这个数组的动作。

fun ActivityAdd(activity:Activity){
  activities.add(activity)
}

然后来写最核心的操作,释放所有的 activity 。

首先是遍历数组,遍历到的 activity 判断是否已经为 null 了,不为 null 证明当前还没有释放掉,那么把这个 activity finish 掉。再从数组中 remove 掉。

fun ActivityFinishAll(){
  for (activity:Activity in activities){
    if (activity != null){
      activity.finish()
      activities.remove(activity)
    }
  }

}

这还没有完,要在每个 activity onCreate 的时候,执行数组的添加动作

ActivityAdd(this)

就写在 override fun onCreate(savedInstanceState: Bundle?) 方法内。

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    ActivityAdd(this)
    ...
  }

当然,这样还不足够,还需要对单独的 activity 实现移除功能。

fun ActivityRemove(activity: Activity){
  activities.remove(activity)
}

这样就具备基本功能了。

PS:其他activity方法关闭方法

四种结束当前的activity方法

//关闭当前activity方法一
  finish();
//关闭当前界面方法二
  android.os.Process.killProcess(android.os.Process.myPid());
//关闭当前界面方法三
  System.exit(0);
//关闭当前界面方法四
  this.onDestroy(); 

但如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据依然保留

Intent intent = new Intent();
intent.setClass(TableActivity.this, FrameActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//设置不要刷新将要跳到的界面
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留

Intent intent = new Intent();
intent.setClass(TableActivity.this, FrameActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:

Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent1);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity

创建一个专门用来处理activity的类

package com.layout;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.Application;
/**
 * 一个类 用来结束所有后台activity
 * @author Administrator
 *
 */
public class SysApplication extends Application {
  //运用list来保存们每一个activity是关键
  private List<Activity> mList = new LinkedList<Activity>();
  //为了实现每次使用该类时不创建新的对象而创建的静态对象
  private static SysApplication instance;
  //构造方法
  private SysApplication(){}
  //实例化一次
  public synchronized static SysApplication getInstance(){
    if (null == instance) {
      instance = new SysApplication();
    }
    return instance;
  }
  // add Activity
  public void addActivity(Activity activity) {
    mList.add(activity);
  }
  //关闭每一个list内的activity
  public void exit() {
    try {
      for (Activity activity:mList) {
        if (activity != null)
          activity.finish();
      }
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      System.exit(0);
    }
  }
  //杀进程
  public void onLowMemory() {
    super.onLowMemory();
    System.gc();
  }
}

在每个activity被创建时加上

SysApplication.getInstance().addActivity(this); 

将该activity添加到list中去。

当你想关闭时,调用SysApplication的exit方法

//关闭整个程序
SysApplication.getInstance().exit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android利用Intent启动和关闭Activity

    一.简介 Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递. 通过StartActivity方法传递intent对象来启动另一个Activity时,可分为两类: l 显式启动:在创建的Intent对象中明确指定启动的是哪个Activity: l 隐式启动:安卓系统根据Intent的动作和数据决定应该启动哪个Activity. 1.显式启动A

  • Android 关闭多个Activity的实现方法

    Android 关闭多个Activity的实现方法 总的来说有四种方法: 1.使用Application来进行关闭 public class App extends Application { private static List<Activity> lists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static

  • Android仿微信activity滑动关闭效果

    Android仿微信activity滑动关闭功能 1.利用具体利用v4包下的slidingPaneLayout实现透明的activity,代码如下: BaseActivity: public class BaseSlideCloseActivity extends AppCompatActivity implements SlidingPaneLayout.PanelSlideListener { @Override protected void onCreate(Bundle savedIns

  • Android中Activity滑动关闭的效果

    最近感觉有一个Activity关闭的效果挺不错的,就是手势滑动就可以关闭当前Activity,于是就想写一篇博客和大家一起分享下!废话不多说,老规矩,还先上效果图,更直观! 项目地址:https://github.com/xinyitiandi/SlidingFinishDemo 上代码: 1.第一个Activity: package com.ekeguan.slidingfinishdemo; import android.content.Intent; import android.os.B

  • Android实现退出时关闭所有Activity的方法

    本文示例实现了Android退出时关闭所有Activity的功能,分享给大家供大家参考之用.具体方法如下: 一般来说,在Android退出时,有的Activity可能没有被关闭.为了在Android退出时关闭所有的Activity,这里给出了以下的类: //关闭Activity的类 public class CloseActivityClass{ public static List<Activity> activityList = new ArrayList<Activity>(

  • Android 侧滑关闭Activity的实例

    Android 侧滑关闭Activity的实例 实现原因 其实侧滑关闭activity在网上也有大量的文章去介绍他,我也有去看,要么是代码实在太多看不下去,要么就是跑了项目没有反应的.唯一的方法还是自己随手鲁一个~,侧滑这个东西在Android中是比较少见的,iOS是最常见不过了,因为毕竟他们没有物理返回键.还有UIScrollView那些.然而我们用的最多的QQ也只是有个功能,并没有真正的滑动效果.至于微信的,我记得N久以前滑出了一个bug.也没什么印象了.估计也是极小的概率事件.于是,当初我

  • android开发之关闭所有的activity的方法

    当app中打开了多个activity的时候,由于进入的比较深,所以,很多app不得不让用户一步一步退回到第一个界面(MainActivity),在一步一步退回的时候,逐个释放. 今天写kotlin来实现,在任意位置,直接退出应用的方法. 首先,每当打开一个 activity 的时候,需要有一个地方做记录,以便让一个循环遍历代码释放所有使用过的 activity 资源. 那么,建立一个数组.这里使用 MutableList,因为它有 add 和 remove 方法,很好用. var activit

  • Android开发之关闭和打开Speaker(扬声器)的方法

    本文实例讲述了Android开发之关闭和打开Speaker(扬声器)的方法.分享给大家供大家参考,具体如下: private int currVolume = 0; /** * 打开扬声器 */ private void openSpeaker() { try{ AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setMode(AudioManager.

  • Android开发之使用SQLite存储数据的方法分析

    本文实例讲述了Android开发之使用SQLite存储数据的方法.分享给大家供大家参考,具体如下: 前面已经说到了几种文件的操作如sharedreference,sdcard.实际上Android还提供了另外的存储方式那就是sqlite.只要学习过数据库掌握这个也是没问题的.下面就和我一起来弄一下这个吧. 1. 安装一个SQLiteDeveloper,这个用来打开android生成的数据库.软件随便搜索就能找到,后面导出数据库只需打开软件点击"数据库"----->"注册

  • Android开发之完全隐藏软键盘的方法

    隐藏软键盘一直是我头痛的事情,没有找到一种真正能隐藏的方法.点击EditText的时候总是弹出软键盘.-----杯具 杯具(一): InputMethodManager im =(InputMethodManager) mEdit getContext() .getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(SoftKeyTest.this.getCurrentFocus().getWindowT

  • Android开发基于Drawable实现圆角矩形的方法

    本文实例讲述了Android开发基于Drawable实现圆角矩形的方法.分享给大家供大家参考,具体如下: 第一步:写个类继承drawable,重写里面的方法,实现的核心代码在draw里 关键技术:BitmapShader public BitmapShader(Bitmap bitmap,Shader.TileMode tileX,Shader.TileMode tileY) 调用这个方法来产生一个画有一个位图的渲染器(Shader). bitmap 在渲染器内使用的位图 tileX The t

  • Android开发中自定义ProgressBar控件的方法示例

    本文实例讲述了Android开发中自定义ProgressBar控件的方法.分享给大家供大家参考,具体如下: 很简单,首先加载Drawable,在onMeasure设置好其区域大小, 然后使用canvas.clipRect绘图 public class ProgressView extends ImageView { private Drawable maskDraw; /** * 加载的进度 0-100 */ private int mProcess = 20; public ProgressV

  • Android开发实现应用层面屏蔽状态栏的方法小结

    本文实例讲述了Android开发实现应用层面屏蔽状态栏的方法.分享给大家供大家参考,具体如下: 一.由于StatusBarManager在SDK中没有提供,所以需要使用反射来调用该类的方法 代码部分如下: Object service = getSystemService("statusbar"); try { Class <?> statusBarManager = Class.forName("Android.app.StatusBarManager"

  • Android开发之禁止下拉通知栏的方法

    本文实例讲述了Android开发之禁止下拉通知栏的方法.分享给大家供大家参考,具体如下: 1.在AndroidManifest.xml中添加权限 <uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/> <uses-permission android:name="android.permission.STATUS_BAR"/> 2.在相应的activity中

  • Android开发实现删除联系人通话记录的方法

    本文实例讲述了Android开发实现删除联系人通话记录的方法.分享给大家供大家参考,具体如下: 1. 负责存放呼叫记录的内容提供者源码在 ContactsProvider 项目下: 源码路径: com/Android/providers/contacts/CallLogProvider.Java 使用到的数据库在: /data/data/com.android.providers.contacts/databases/contacts2.db 表名:calls 呼叫记录有三种类型: 来电:Cal

  • Android开发中简单设置启动界面的方法

    本文实例讲述了Android开发中简单设置启动界面的方法.分享给大家供大家参考,具体如下: 启动界面的意义是为了让后台处理耗时的复杂工作,当工作处理完成后,即可进入主界面.相比让用户等待布局加载完成,使用一张图片作为启动背景,会带来更好的体验. 首先,需要建立一个简单的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas

随机推荐