对于网上所提供的杀进程,杀包等方式不予评价,这里提供一下自己觉得挺好使的二种方法,和大家一起进行分享。
一:利用全局容器
android提供了一个类似于EE中的servletContext的东西-Application。
在application里面我们通常会进行创建一些全局变量或者对应用程序进行一些必要的初始化。
第一个方法的思路就在于,我们可以在application里面创建一个集合容器,用于记录每个打开的activity,一旦我们有退出整个应用程序的需求的时候,我们就可以迭代该集合容器,把该容器里面保存的activity依次关闭。
核心代码如下,详细代码见附件一
public class BaseApp extends android.app.Application {
public static Stack<Activity> activitys = new Stack<Activity>();
/*
* @see android.app.Application#onCreate()
*/
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
}
public static void pushActivity(Activity mActivity) {
activitys.add(mActivity);
}
public static void popAll() {
while (!activitys.isEmpty()) {
Activity act=activitys.pop();
act.finish();
}
}
}
二:利用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
都会进入同一个应用中。
在这里我们可以把某个activity设置为singleTask模式,当我们有应用退出需要的时候,我们就可以通过intent打开该activity,然后activity会把其他的activity移出activity栈,然后我们再在该activity的onnewIntent方法进行finnish,那么我们就可以相对完美的退出该应用程序。
核心代码如下,详细见附件二:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("我是第一个activity");
tv.setLayoutParams(new LayoutParams(100, 200));
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,
MainActivity02.class);
startActivity(intent);
}
});
setContentView(tv);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
/*
* @see android.app.Activity#onNewIntent(android.content.Intent)
*/
@Override
protected void onNewIntent(Intent intent) {
// TODO Auto-generated method stub
super.onNewIntent(intent);
finish();
}
}
分享到:
相关推荐
解决android退出整个应用的例子
android中连续点击返回键退出整个应用的实现
本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接...
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
直接关闭所有的Acitivity并退出应用程序
NULL 博文链接:https://txlong-onz.iteye.com/blog/1021942
android 全退出,不管打开多少页面,按退出直接退出整个应用 。
在B中如何关闭整个Android应用程序呢? 本人总结了几种比较简单的实现方法。1. Dalvik VM的本地方法 代码如下:android.os.Process.killProcess(android.os.Process.myPid()) //获取PIDSystem.exit(0); //常规java、c#...
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面软件开发网小编就给大家介绍android开发退出程序的几种方法。 1、...
主要介绍了Android 实现彻底退出自己APP 并杀掉所有相关的进程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
XX学院 智能移动终端应用开发 设计报告 (20XX/20XX学年第XX学期) 题 目 : 基于Android系统的贪吃蛇游戏 专 业 : 小组成员 : 设计成绩 : 年月日 摘 要 Android是基于Linux开放性内核的操作系统,是Google公司在...
本项目是一个有历史记录和主题切换的安卓计算器项目源码,有比较复杂的布局和SQLite应用,整个项目分了好几个层。 主要功能: 1、切换日光夜间模式 2、记录每次计算的过程和结果 (添加、删除数据库) 3、按钮...
第1章介绍了阅读本书所需要做的一些准备工作,包括对Android整个系统架构的认识,以及Android开发环境和源码阅读环境的搭建等。注意,本书分析的源码是Android2.2。 第2章通过Android源码中的一处实例深入地...
它可以直接结束整个应用。在使用时需要权限android.permission.RESTART_PACKAGES 在2.2,这个方法失效了。 在2.2添加了一个新的方法,killBackgroundProcesses(),需要权限 android.permission.KILL_...
本应用最低至android 3.0,目标版本android 6.0。 本应用支持的功能有: 酷炫的锁屏页面(圆形搜索栏),定时退出(定时歌曲数退出,定时时间段退出,定时时间点退出),炫彩可视化音乐之圆形频谱(使用了渐变色,...