APP应用完美退出的方法的尝试

会做出这个demo,主要原因在于下班后看到群里都在谈论这个问题,一下子兴趣由起,下班了吃完饭继续加班搞个demo来试试。废话不多说了,以前写上学作文也这样,先搞个长长的开头凑字数

当然,说到完美APP退出,我以前经常用的方法就是使用List来存储每个Activity,然后要退出的时候,就是要关掉所有的Activity,直接调用finishAll就行啦,其实就是一个ActivityManager的管理器而已。但是。。。但是。。。今天在群里有人问了这个问题,群主竟然说用这种方法来退出应用的别说是我群里的人。瞬间觉得自己low了很多,麻痹我不是这么low的人啊,躺着也中枪啊,我毕设都是这么做的啊!!!于是,兴(一)趣(气)一(之)来(下)搞起了demo来,查了网上的资料,貌似有两种比较能接受,且还算完美实现退出的方法。下面就具体的讲下实现的方法吧.。

一。发送广播退出(好像很多人都知道)

这种退出方式很早就有所耳闻,但没去尝试,今天就网上搜了下,实现了,确实可以,比较推荐。

具体代码是这样的,先建一个Activity的基类,作为来放Broadcast的地方,这样其他Activity只要继承此基类就行了,不用每次都要重写一遍注册和注销广播。

代码如下:

public class BaseActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		IntentFilter filter = new IntentFilter();
		filter.addAction("com.jrue.exitApp");
		registerReceiver(mExitReceiver, filter);

	}

	private BroadcastReceiver mExitReceiver = new BroadcastReceiver() {
		@Override
		public void onReceive(Context context, Intent intent) {
			if ("com.jrue.exitApp".equals(intent.getAction())) {
				context.unregisterReceiver(this);
				finish();
			}
		}
	};

}

在退出的时候只要去发送这个广播就行啦:

                    case R.id.exit_use_broadcast:

			Intent intent = new Intent("com.jrue.exitApp");
			getApplicationContext().sendBroadcast(intent);

	        	break;

好!完美运行,这个方法可以。

二。切换到后台,最后finish掉(其实不知道怎么命名啦)

原来大概是这样的,不知道会不会理解错。就是通过setFlags将其改变为 Intent.FLAG_ACTIVITY_CLEAR_TOP 状态,而这个状态具体怎么讲呢,就是进入的Activity若在栈中已经存在的时候,则将此Activity之上的其他Activity移除栈,以达到将目标Activity移至栈顶的目的。然后setAction的 Intent.ACTION_MAIN 找到程序的第一个Activity,也就是程序第一次打开出现的Activity,很有可能就是栈底的Activity,所以我们这样做的目的就很简单啦。

总结一下:就是故意放进去一个应用打开第一个打开的activity,然后改变Flags,让第一个Activity之上的Activity出栈,使第一个Activity顺利达到栈顶,然后直接finish(),因为栈中也就只有一个Activity了,finish就是关闭应用了。太骚了这方法。

代码如下:

	Intent intent2 = new Intent(Intent.ACTION_MAIN);
            intent2.addCategory(Intent.CATEGORY_HOME);
            intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(intent2);
           // android.os.Process.killProcess(android.os.Process.myPid());
            finish();

好啦。也就这样了,demo的下载地址也会奉上,有用最好了,没用可以无视之无视之~~~小弟不才啊!

demo下载



版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-27 23:44:03

APP应用完美退出的方法的尝试的相关文章

Android之完美退出方法

为什么要写这篇文章? 网上有很多种退出方法,可实际上很多方法都不通用(在某个版本下可用,到了另一个版本就不行),或者方法的实际效果根本就和其描述不符(也不知道那些发帖的人测没测试过). 但我们的需求又确实存在.在某些情况下,我们需要在应用中打开多个Activity,但如果仅仅使用finish()方法就不能在需要的时候达到一次性退出的效果,自己作为一个Android退出问题的受害者,通过良久思考和实际测试,找到了一个比较不错的,在2.1-2.2-2.3版本下都通用的完全退出方法(2.1版本也基本可

Android经典完美退出方法

Android经典完美退出方法,使用单例模式创建一个Activity管理对象,该对象中有一个Activity容器(具体实现自己处理,使用LinkedList等)专门负责存储新开启的每一个Activity,并且容易理解.易于操作,非常不错! AppUtils类(储存每一个Activity,并实现关闭所有Activity的操作) /* * To change this template, choose Tools | Templates * and open the template in the

android基础知识---重写系统Crash处理类保存上传和完美退出程序的方法

当今市场上android的手机型号和版本太多要做到完全适配几乎是完全不可能的,那么怎么才能获取其他的玩家的出错的信息呢!这里我们就要重新定义系统的Crash处理类了. 首先我们我们新建一个CustomCrashHandler类 实现UncaughtExceptionHandler接口,重写回调方法void uncaughtException(Thread thread, Throwable ex) package com.example.admin.crashchuli; import andr

Xcode导出App一般问题及其解决方法(开发者协议变更及Bundle Id过期问题)

Xcode导出App一般问题及其解决方法 问题一:开发者协议变更问题. 变更后打包会出现如下图A警告,此时点击 "visit developer website"进入Apple开发者网站,登录开发者账号后会出现如图B后,点击"Review Agreement" 进入下一步确认同意条款即可. (图A) (图B) 问题二:Bundle Id过期(expired)问题 过期后打包过程会出现如图C的警告,此事,您需要登录到Apple Developer,(左侧)Certif

Xcode itunes完美打包api方法

转:http://bbs.csdn.net/topics/390948190 Xcode6 itunes完美打包api 方法! 特点轻盈小巧,方便快捷!

a=10,b=6,将其值互换。(至少3种方法,尝试不定义第3个变量)

互换两个变量值.(至少3种方法,尝试不定义第3个变量) 废话不多说直接上代码 package com.admxj.swap; /*  * 2015年12月7日23:49:20  * Java可避免C语言的溢出错误  * 方法四可能会出现溢出情况  */ public class Day01 { public static void main(String[] args) { int[] arr = {-2147483449,2147483420}; System.out.println("源数据

多种多样的App主界面Tab实现方法

看了一下App主界面Tab实现方法,总结一下: 再看看实现的效果图:                            第一种:ViewPager实现Tab: 思路:1.布局方面实现顶层和底层布局,中间是ViewPager实现的.中间是四个布局实现的,List<View>                 2.实现:setOnPageChangeListener内部类                3.需要一个适配器:PagerAdapter 源代码如下: <span style=&q

jquery.nicescroll完美滚动条使用方法

jquery.nicescroll完美滚动条使用方法(转) 配置参数 :当调用"niceScroll"你可以传递一些参数来定制视觉方面: cursorcolor - 十六进制改变光标颜色,默认值是"#000000" cursoropacitymin - 改变不透明度非常光标处于非活动状态(scrollabar"隐藏"状态),范围从1到0, 默认为0(隐藏) cursoropacitymax - 改变不透明度非常光标处于活动状态(scrollaba

app framework map及ajax方法

$(function () { $.ajax({ url: 'Ashx/GetProductList.ashx', contentType: "JSON", success: function (data) { alert(data); var jsonData = eval("(" + data + ")"); alert(jsonData); $.map(jsonData, function (k, v) { alert("ssss