Android全局退出的两种方法
第一种方法参考《第一行代码》78页
建立一个ActivityCollector类,提供静态方法addActivity,fininshAll(以list为容器)
然后我们建立的Activity都继承一个BaseActivity,在BaseActivity中的oncreate方法中,使用ActivityCollector的addActivity(this),
想要随时全局退出只要调用ActivityCollector.finishAll()
今天在看到另一个和Activity启动模式有关的全局退出方法

我们写了三个Activity,然后设置textView的点击事件,跳转下一个Activity,这时候我们想在第二个或第三个Activity直接退出,该怎么做
第一步:设置MainActivity的 android:launchMode="singleTask"
singleTask
- 判断Activity所需任务栈内是否已经存在,如果存在,就把该Activity切换到栈顶(会导致在它之上的都会出栈)
- 如果所需任务栈都不存在,就会先创建任务栈再创建该Activity
- 可以理解为 顶置Activity+singleTop 的模式
第二步:我们建立一个BackUtils类
import android.app.Activity;
import android.content.Intent; public class BackUtils {
public static void allBack(Activity activity){
Intent intent=new Intent(activity, MainActivity.class);
activity.startActivity(intent);
}
}
类中的AllBack方法就是去启动MainActivity。
我们可以在其他Activity中复写
@Override
public void onBackPressed() {
super.onBackPressed();
BackUtils.allBack(this);
}
这时候,可以思考到,MainActivity是singletask,这样来到MainActivy,栈中MainActivy上面的都会出栈,但是这时候还剩下一个MainActivity,
我们做的就是要来到MainActivity后立即销毁它。
这时,刚好存在方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
finish();
}
对于这个方法
This is called for activities that set launchMode to "singleTop" in their package, or if a client used the Intent.FLAG_ACTIVITY_SINGLE_TOP flag when calling startActivity. In either case, when the activity is re-launched while at the top of the activity stack instead of a new instance of the activity being started, onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.
An activity will always be paused before receiving a new intent, so you can count on onResume being called after this method.
这里的onNewIntent() will be called on the existing instance with the Intent that was used to re-launch it.我们的MainActivity使我们进去App的第一个界面,所以必然已经存在,当设置singleTop或者singleTask时,会调用onNewIntent()。
我们只要在onNewIntent()调用finish。
Android全局退出的两种方法的更多相关文章
- Android 抗锯齿的两种方法
Android 抗锯齿的两种方法 (其一:paint.setAntiAlias(ture);paint.setBitmapFilter(true)) 在Android中,目前,我知道有两种出现锯齿 ...
- android emulator启动的两种方法详解
android emulator启动的两种方法详解 转https://blog.csdn.net/TTS_Kevin/article/details/7452237 对于android学习者,模 ...
- android使用全局变量的两种方法
在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对象语言和过程语言区别很大,不再是include就可以的.这里我写了使用全局变量的两种方法: 1.使用applicati ...
- iOS 关于退出键盘两种方法和避免遮挡
退出键盘: 方法1:不使用代理,直接使用: -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.textFi ...
- [转]android使用全局变量的两种方法
本文转自:http://blog.csdn.net/feiyangxiaomi/article/details/9966215 在我们使用android编写程序的时候,少不了想利用全局变量,但是面向对 ...
- Android访问WebService的两种方法
首先解释一下WebService:WebService是一种基于SOAP协议的远程调用标准.通过WebService可以将不同操作系统平台,不同语言.不同技术整合到一起.详细见:http://baik ...
- (转)Android创建桌面快捷方式两种方法
[IT168技术]Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还 ...
- Android apk签名的两种方法
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 为了保证 ...
- android 实现分享功能两种方法
当我想做一个智能的记事本的时候,我就在尝试自己写一组分享功能.后来才知道,原来每个社交软件中都有自己的分享接口. 这就大大减少了我们的代码量了. 第一种方法:特点--简单 package com.ex ...
随机推荐
- mysql InnoDB引擎 共享表空间和独立表空间(转载)
PS:innodb这种引擎,与MYISAM引擎的区别很大.特别是它的数据存储格式等.对于innodb的数据结构,首先要解决两个概念性的问题: 共享表空间以及独占表空间. 1.什么是共享表空间和独占表空 ...
- 2.boost遍历数组容器
#include <iostream> #include <string> #include<boost/array.hpp>//区别 using namespac ...
- 关于Fragment的setUserVisibleHint() 方法和onCreateView()的执行顺序
1:setUserVisibleHint(boolean isVisibleToUser)的方法就很重要,根据方法名来看当前页面是否可见, 里面的boolean值就是判断当前页面是否可见的变量,所以大 ...
- Python实现文件阅读功能(Python学习笔记)
#!/usr/bin/python# Filename: filereader.pyimport sys def readfile(filename): '''Print a file to the ...
- .net Web获取域用户账号
HttpContext.Current.Request.LogonUserIdentity.Name //可以获取出域账号 HttpContext.Current.Request.LogonUserI ...
- git 和github 关联
创建本地仓库: 查看本地仓库配置信息: 如果没有配置,则进行配置: git config --global user.name "这里换上你的用户名" git config --g ...
- 我的PHP学习之路
由于工作中,做微信小程序需要我自己写一些后台代码.并且公司后台用的是php.所以我决定在周末和下班后抽空学习php.一开始,我想找一些入门视频来学,然后发现好像效率不是很好.不如看书来得痛快.(主要是 ...
- 用xstart远程连接linux图形用户界面时发生已经在使用的情况
1.举例打开pycharm 2.此时要输入ps aux|grep pycharm,出现下面的情况 3.然后找到矩形圈住的内容,然后输入 这样就杀掉了远程机子上pycharm,接着继续输入pycharm ...
- uname---用于打印当前系统相关信息
uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...
- Ubuntu 经常使用软件安装
Chromium 14.04+ FlashPlayer 原理 就是安装一个flash插件而已啊,网上都没有详解. 我们首先在浏览器地址栏输入chrome://plugins, 全部插件都会展示出来了. ...