`
- 浏览:
103484 次
-
Android利用activity启动模式退出整个应用
前面我们来先看一下目前网上提供的几种方案:1.退出单个activity1)、获取当前进程的id,杀死该进程。android.os.Process.killProcess(android.os.Process.myPid())2)、终止当前正在运行的Java虚拟机方法。System.exit(0);3)、finish();4)、杀包方式。ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); manager.restartPackage(getPackageName());添加权限:<uses-permission android:name="android.permission.RESTART_PACKAGES" />;(在2.2之前可以利用这个退出应用,很遗憾android2.2后失效了,连单个activity都结束不了)2.退出整个应用(多个Activity) 以下我直接列出网上给出的几种方案,就不做详细说明了。1)、制造抛异常导致程序强制退出:2)、用个容器记录每个打开的Activity,在需要退出的时逐一关闭每个Activity3)、广播方式:4)、递归退出在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。3.接下来看一下怎么利用activity启动模式退出整个应用,在这之前我简单的说下activity四种模式的概念,因为这个退出方法跟 activity的启动模式有一定的关系;
1)、standard 模式;也就是默认模式,每次激活Activity时都会创建一个Activity实例,并放入任务栈中。2)、singleTop 模式;如果在任务栈中的栈定存在该Activity实例,下次激活该Activity实例时就不会创建新的 Activity的实例,直接重用它(在重用的这个过程中会调用实例的OnNewIntent()这个方法),否则就创建新的Activity实例。3)、singleTask 模式;如果在栈中已经有该Activity的实例,以后就不会创建新的实例了,而会重用该实例(在重用的这个过程中会调用实例的OnNewIntent()这个方法)。重用时,如果该Activity实例不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。4)、singleInstance 模式;在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例(
会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。在android系统中,要想直接的关闭整个应用,这是不可能的,而在项目中当需要关闭整个应用时几乎都是采用间接的办法,以上列出的几种方案中其原理都是逐一关闭activity(制造抛异常导致程序强制退出除外),然后退出程序。接下来我们也利用这个原理来实现退出整个应用的目的,在activity启动模式singleTask
模式中,刚才提到如果该Activity实例存在但不是在栈顶,它会让该实例回到栈顶,而它上面的实例将会被移出栈。这样子,我们就可以将应用中的主入口Activity(这里假设主Activity为MainActivity)设置成singleTask模式,这样子我们就保证了这个Activity实例存在于栈底中,后面不管有多少其他Activity实例添加进来它始终会在栈底,这时我们只要在要关闭整个应用的那个Activity中把他转到这个Activity来(startActivity(xx.this,MainActivity.class));这样子其他的activity实例就会被移出栈,这时栈中只剩MainActivity实例,如果此时要是再能让这个MainActivity实例移除出栈,那么我们就达到了关闭整个应用的目的,不知道大家刚才有没有注意到OnNewIntent()这个方法,这个方法就是重用activity实例时会被调用,因此我们只要在MainActivity重写该方法并加上一句finish()来关闭当前activity实例我们的目的就达到了……package com.test.launchmode;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;public classMainActivity extends Activity {@Overrideprotected final void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);startActivity(new Intent(this,xx.class));}@Overrideprotected void onNewIntent(Intent intent) {// TODO Auto-generated method stubsuper.onNewIntent(intent);this.finish();}}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
android activity启动模式:standard、singleTop、singleTask、singleInstance详解
android开发中activity不同启动模式的学习,通过不同的activity启动,会在activity中显示task ID 和Android 实例,方便学习activity的启动模式。
主要为大家详细介绍了Android利用Intent启动和关闭Activity的相关操作,感兴趣的小伙伴们可以参考一下
Android的Activity一共有4中启动模式分别是:standard、singleTop、singleTask、singleInstance。资源是该例子的项目,直接导入项目即可。
本节课程内容:Activity启动模式与跳转 Android中采用任务栈的形式来管Activity。栈是一种“先进后出”的数据结构。 Android中的任务栈 Task Stack in Android Activity的启动模式 Activity startup mode Activity...
Activity启动和退出动画
Android总Activity的启动模式分为四种: Activity启动模式设置: <activity android:name=".MainActivity"android:launchMode="standard" /> Activity的四种启动模式: 1.standard 模式启动模式,每次激活...
Android 有四种启动模式, 分别是 standard、singleTop、singleTask 、singleInstance 这个Demo实现了其中的三个启动模式
Android Activity的四种启动模式及其应用场景 https://blog.csdn.net/qq_31939617/article/details/80696728
android的Activity的四中启动模式!完整代码仅供参考
Android高级应用源码-Activity启动和退出动画.zip
笔者近期做的一个项目用到了Activity的启动模式,也算是第一次深刻地领会到了其强大与方便。在此也是将自己所得与大家分享,自己写了一个比较简易的demo,便于让大家理解。 此篇博客意在让对启动模式不了解的开发者...
如何利用动态代理技术Hook掉系统的AMS服务,来实现拦截Activity的启动流程。
源码参考,欢迎下载
android activity4种启动模式测试 一个演示启动模式的demo,结合博文,可以很方便的熟悉各种启动模式之间的差异。
Android各种超炫特效 Activity启动模式
该实例包含Activity启动模式的所有情况,非常全
这是一个关于Activity的启动模式的总结
Android中Activity的四种启动模式案例!
Android应用程序的Activity启动过程简要介绍和学习计划