Android 退出多Activity的application的方式方法

在开发过程中,我们常常需要一个退出功能,来退出该应用的所有Activity。下面,我们列举一些退出应用的几种方式。

1.利用ActivityContainer来管理所有的Activity的引用

2.使用广播通知BaseActivity结束

3.直接杀死进程

4.采用SingleTask的特点,结束应用

5.第四种方式的更优雅实现

6.双击返回键退出

方式一:利用ActivityContainer管理所有的Activity引用

该方式是建立一个通用的Activity的父类 BaseActivity以及一个ActivityContainer类,ActivityContainer是一个集合类来保存所有Activity的引用,关键的代码如下:

public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActivityContainer.getInstance().addActivity(this); } @Override protected void onDestroy() { super.onDestroy(); ActivityContainer.getInstance().removeActivity(this); } } class ActivityContainer { private ActivityContainer(){ } private static ActivityContainer instance = new ActivityContainer(); private static List<AppCompatActivity> activityStack = new LinkedList<>(); public static ActivityContainer getInstance(){ return instance; } public void addActivity(AppCompatActivity aty) { activityStack.add(aty); } public void removeActivity(AppCompatActivity aty) { activityStack.remove(aty); } /** * 结束所有的Activity */ public void finishAllActivity(){ for (int i = 0 , size = activityStack.size(); i < size;i++) { if (null != activityStack.get(i)) { activityStack.get(i).finish(); } } activityStack.clear(); } }

然后真正的业务需求的Activity分别继承自BaseActivity,在需要退出应用的时候,执行

ActivityContainer.getInstance().finishAllActivity();

方式二:使用广播通知BaseActivity结束

在原有的BaseActivity的基础上,创建一个广播接收器,当收到广播通知的时候,执行BaseActivity.this.finish();

BaseActivity的代码如下:

public class BaseActivity extends AppCompatActivity { protected static final String EXITACTION = "action.exit"; private ExitReceiver mExitReceiver = new ExitReceiver(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(EXITACTION); registerReceiver(mExitReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(mExitReceiver); } class ExitReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { BaseActivity.this.finish(); } } }

方式三:直接杀死进程

该方法是通过系统提供的杀死进程的方法来杀死当前Activity所在的进程,但由于各种定制ROM对底层修改的太多,导致很多时候该方法并不能奏效

方式一  android.os.Process.killProcess(android.os.Process.myPid());

方式二 System.exit(0);

方式三 ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
manager.killBackgroundProcesses(getPackageName());

方式四:采用SingleTask的特点,结束应用

我们的应用一般的Activity打开顺序是最开始的splash页面,然后调转到我们的主Activity,同时finish掉splash页面,然后在主Activity上面进行各种Activity的跳转,这些跳转的Activity,有的finish掉,有的在任务栈中。如果我们设定主Activity的启动模式是singleTask,然后从该Activity启动的Activity的启动模式是默认模式,则这些Acitivty都会和主Activity在一个任务栈中,并且主Activity会在栈底。这时,当我们退出的时候,启动主Activity,并且给主Activity发送一个退出Acitivity的广播,则因为singleTask的特点,会清空其上所有的Activity上面的所有Activity,广播会通知主Activity结束自己,则就完整的退出了所有的Activity。

具体的步骤如下:

1.在MainActivity中注册一个广播,该广播内容是MainActivity.this.finish()

2.当在选项页面,点击退出按钮时,启动MainActivity,会因为singleTask的特点,清空掉其他的Activity,在启动的时候,send一个广播,给MainActivity,让其结束。

3.退出全部应用

方式五:第四种方式的更优雅实现

第四种方式的思路是正确的,但是最后通过广播来通知MainActivity退出的形式,确实不是很好。对于Activity的实现,有更好的方式,就是借助onNewIntent的方法。

该方法是在Activity重新从后台回到前台的时候会调用,完整的方法调用是onNewIntent-onRestart-onResume。我们可以在onNewIntent中实现MainActivity的退出。

@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Log.e("main", "onNewIntent调用"); if (intent != null) { boolean isExit = intent.getBooleanExtra(ACTION, false); if (isExit) { this.finish(); } } }

当在选项页面,点击退出按钮时,启动MainActivity时,Intent携带一个退出的参数,当检测到该参数的时候,退出应用。

方式六:双击返回键退出

双击退出键是比较简答有效的一种退出方式,比较适用于退出的界面是MainActivity,利用MainActivity的singleTask的特性,但回到前台的时,清空其上的其他Activity。这时,在MainActivity上监听keyDown事件,双击退出。
 代码如下:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if (isExit) { this.finish(); }else { Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show(); isExit = true; new Handler().postDelayed(new Runnable() { @Override public void run() { isExit = false; } },2000); return true; } } return super.onKeyDown(keyCode, event); }

在这里,是由一个handler来实现一个计时器的功能,保证2s之内,不过不在返回,则恢复状态。这个计时器有多种实现方式,比如计时器,如下:

new Timer().schedule(new TimerTask() { @Override public void run() { isExit = false; } },2000);

又或者简单的计算时间差,该方式实在太多简单,就不多说了。

源码地址:ActivityQuitDemo_jb51.rar

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

时间: 2024-10-06 16:49:49

Android 退出多Activity的application的方式方法的相关文章

Android实现从activity中停止Service的方法_Android

本文实例讲述了Android实现从activity中停止Service的方法.分享给大家供大家参考,具体如下: 1.在AndroidManifest.xml注册Service <service android:name=".service.SensorService" > <intent-filter> <action android:name="ITOP.MOBILE.SIMPLE.SERVICE.SENSORSERVICE"/>

android:在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件?

问题描述 android:在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件? 如题,在Activity如何写一种方法,当调用时可以永久的向原来的布局中增添或修改控件? 解决方案 不明白干嘛,添加控件,无非就是先创建或渲染出一个view,然后通过addview加入到指定的容器中 解决方案二: 可控的话 先写在xml中设visible为gone. 需要的时候设置为visible 解决方案三: 不太清楚你的意思.如果就是添加界面的话,可以用两种方法,一种是楼上说的,可以

Android编程实现activity dialog透明背景的方法

本文实例讲述了Android编程实现activity dialog透明背景的方法.分享给大家供大家参考,具体如下: 首先查一下window  activity的关系 具体省略.... 我的理解就是 每个activity都有一个window 也就是view的最顶层容器 activity是提供给用户交互的一组View容器(window的child) 层次关系是 <window> <activity> </activity> </window> 所以说如果需要设置

Android实现从activity中停止Service的方法

本文实例讲述了Android实现从activity中停止Service的方法.分享给大家供大家参考,具体如下: 1.在AndroidManifest.xml注册Service <service android:name=".service.SensorService" > <intent-filter> <action android:name="ITOP.MOBILE.SIMPLE.SERVICE.SENSORSERVICE"/>

Android退出应用最优雅的方式(改进版)_Android

我们先来看看几种常见的退出方法(不优雅的方式) 一.容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; public class BaseActivity extends Activity { @Override protected

Android退出应用最优雅的方式(改进版)

我们先来看看几种常见的退出方法(不优雅的方式) 一.容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; public class BaseActivity extends Activity { @Override protected

Android 启动activity的4种方式及打开其他应用的activity的坑_Android

Android启动的四种方式分别为standard,singleTop,singleTask,singleInstence. standard是最常见的activity启动方式,也是默认的启动的方式.当启动一个activity的时候他将进入返回栈的栈顶.系统不会管栈内是否有相同的activity,方式像后入先出. singleTop方式是在活动启动的时候,系统先判定栈顶是否有相同的活动,如果没有则新建活动,否则将不新建活动.而是直接使用他. singleTask方式在活动启动的时候,系统先判定栈

Android 仿微信Activity进入退出动画(右进右出动画 )

其实设置Activity动画的根本也就是设置View的动画,因为Activity有一个根的View叫DecorView.下面介绍两种设置Activity的动画 一.[全局配置Activity显示动画] 1.修改Activity Theme    在styles.xml中输入以下代码       [html] view plaincopy <style name="AnimationActivity" parent="@android:style/Animation.Ac

android 显示listVIew按后退键闪动不退出当前activity问题

问题描述 android 显示listVIew按后退键闪动不退出当前activity问题 Android,我有一个activity中,主要就是有一个ListView布局,用来加载网络获取的数据,没有图片,都是文字.当listView加载完毕后,我按手机后退键,当前activity闪动一下回到了listView的顶部,也不是报错,后台log也不会报错.有时候会发生,又时候不会!哪位大神知道这个应该是哪一方面的问题!谢谢了... 解决方案 可以把你的代码放出来让我们看下么?不然这样真的很束手 解决方