Menu学习,和如何实现一步关闭所有的activity退出应用程序

1首先介绍如何写menu,若想在activity里添加menu按钮时,在activity里覆写下面2个方法:

public boolean onCreateOptionsMenu(Menu menu)和public boolean onOptionsItemSelected(MenuItem item),并且在onCreateOptionsMenu加载menu的xml界面。xml界面在res文件下menu文件夹里创建一个xml文件添加menu的选项,也可以为选项添加图标,如下文件。然后在onOptionsItemSelected实现点击相应条目后的操作。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.demo.MainActivity" >

    <item
        android:id="@+id/close_all"
        android:title="完全退出"
       />
	<item
        android:id="@+id/close_this"
        android:title="完全当前"
       />
</menu>

 2、当应用程序开启很多activity时候,想要退出就必须按很多次返回键,我们可以在menu实现一步退出:

退出有三种方式:

 

经过测试:1虽然能关闭程序但不会清空任务栈,也就是退出失败。2也无法实现程序完全退出。3需要权限,多用于安全管家之类的软件,它只能关闭其他的应用程序,不能关闭自己的应用程序,注意还需要权限。

  3、为了实现程序的全部退出:

(1)我们可以定义个类App,继承Application,它是应用程序的实例,只要程序存活就存在,在里面定义一个用于存入所有activity的集合成员变量,并且覆写该类的oncreat方法(只在应用程序第一次运行时调用)在里面实例化这个成员变量。

(2)APP类创建好后,打开清单文件,点击application,然后点击name后面的browse预览,就会加载出刚刚写app类,点击选中点击ok就会将App这个实例配置到清单文件的application内:

(3)然后在每个activity的oncreat方法里,把该activity添加到App的集合里 ,在Ondestroy()里从集合里删除该activity。最后在点击menu里的“完全退出”的时候,就finish掉所有的activity即可。

  4、demo如下:实现了上面所讲到的:

1、activity1和activity2的xml文件都是一个textview和button一个是显示第几个activity,一个是点击激活另一个activity的,因此这里就不给出了。

2、App类:

public class App extends Application {
	//记录所有的activity的集合
	 ArrayList<Activity>activities;
	//private
	//创建整个应用程序的全局实例,
	//在整个程序第一次创建时候执行
	@Override
	public void onCreate() {
		activities=new ArrayList<Activity>();
		super.onCreate();
	}

}

 3  MainActivity的java文件:,在Activity2里也是在oncreat方法里吧activity加到集合,然后ondestroy里移除activity,因此这里就只给出MainActivity文件

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        App app=(App) getApplication();
        app.activities.add(this);
        setContentView(R.layout.activity_main);
    }

    public void start2(View v)
    {
    	Intent intent=new Intent();
    	intent.setClassName("com.example.demo", "com.example.demo.Activity2");
    	startActivity(intent);
    }

	@Override  //实现value的界面加载
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater=new MenuInflater(this);
		inflater.inflate(R.menu.main, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override//实现menue的点击事件:当前退出,和完全退出
	public boolean onOptionsItemSelected(MenuItem item) {

		switch (item.getItemId()) {
		case R.id.close_all:
			App app=(App) getApplication();
			for(Activity act:app.activities)
				act.finish();
//   打印结果证明:activity被finish掉后,app.activities里的activity对象并没被移除,它finish是操作任务栈的activity,
//			因此可以用高级for循环
			System.out.println(app.activities.size());
			break;

		case R.id.close_this:
			finish();
			break;
		default:
			break;
		}

		return super.onOptionsItemSelected(item);
	}

	@Override//当按返回键等时候就会销毁该activity因此也要移除集合里的activity
	protected void onDestroy() {
		App app=(App) getApplication();
		app.activities.remove(this);
		super.onDestroy();
	}
}

  

时间: 2024-10-08 09:32:28

Menu学习,和如何实现一步关闭所有的activity退出应用程序的相关文章

Android开发中在一个Activity中关闭另一个Activity

Android开发中在一个Activity中关闭另一个Activity 比如有ActivityA, ActivityB,在ActivityB中关闭ActivityA 解决方案: 1. 在 ActivityA 里面设置一个静态的变量instance,初始化为this在 ActivityB 里面, ActivityA.instance.finish(); 2. 也可以通过ActivityManager ActivityManager manager = (ActivityManager)getSys

Meteor:关闭所有tab时退出登录

功能描述:在浏览器退出时(所有tab关闭时)退出登录 需求来源:支持类似传统网页登录时的remember me选项 背景:Meteor应用中,用户登录后,会在浏览器的localStorage保存resume token, 所以下次再使用该浏览器打开同一meteor应用时,会自动登录.有时,我们希望应用支持在浏览器退出时(所有tab关闭时)即退出登录,然而meteor被没有对这项功能的原生支持,需要我们自己实现. 要点:如何检测tab关闭,如何检测所有tab关闭 如何退出登录 调用Meteor.l

Windows下如何关闭占用某一端口的程序与服务(转载)

今天使用JBoss服务器,它的端口被占用了,因此总是发生JVM的端口冲突的异常,但我又不知道到底是哪位大仙在这个8080端口上作怪,怎么办呢,下面提供一种简单可行的方法 1. 检测端口是否被占用:(命令行) netstat -an 2. 查看各端口上的服务:(命令行) fport         // 这时我检测到我的8080端口由p2pSvr占用(热狗之类的程序的吧) 注:fport是Windows2000自带的工具,XP上没有,上网下一个就可以 3. 关闭检测到的服务或进程 若是服务,则可:

python学习之最简单的获取本机ip信息的小程序

文章是从我的个人博客粘贴过来的,大家可以直接访问我的个人博客哦 http://www.iwangzheng.com 获取本机ip信息的命令ifconfig总是在用,这次拿到pyhton代码里,感觉python好麻烦啊,每次都要import. 可以在程序里直接read出来,也可以先在命令行执行ifconfig > xx.txt,这样可以直接访问倒入后的文本信息. 这个小程序有个问题,与朋友讨论了还没解决彻底,如果用findall是可以匹配所有的,但是怎么解决用match只匹配一次的问题呢,当然如果

学习Shell脚本编程(第4期)_在Shell程序中的使用变量

变量的赋值 变量的访问 变量的输入 4.1 变量的赋值     在Shell编程中,所有的变量名都由字符串组成,并且不需要对变量进行声明.要赋值给一个变量,其格式如下: 变量名=值  注意: 等号(=)前后没有空格 例如: x=6 a="How are you " 表示把6赋值给变量x,字符串"How are you "赋值给变量a. 4.2 访问变量值 如果要访问变量值,可以在变量前面加一个美元符号"$",例如: [[email protect

Hadoop基础学习(一)分析、编写并运行WordCount词频统计程序

前面已经在我的Ubuntu单机上面搭建好了伪分布模式的HBase环境,其中包括了Hadoop的运行环境. 详见我的这篇博文:http://blog.csdn.net/jiyiqinlovexx/article/details/29208703 我的目的主要是学习HBase,下一步打算学习的是将HBase作为Hadoop作业的输入和输出. 但是好像以前在南大上学时学习的Hadoop都忘记得差不多了,所以找到以前上课做的几个实验:wordCount,PageRank以及InversedIndex.

学习Shell脚本编程(第3期)_在Shell程序中使用的参数

位置参数 内部参数 如同ls命令可以接受目录等作为它的参数一样,在Shell编程时同样可以使用参数.Shell程序中的参数分为位置参数和内部参数等. 3.1 位置参数 由系统提供的参数称为位置参数.位置参数的值可以用$N得到,N是一个数字,如果为1,即$1.类似C语言中的数组,Linux会把输入的命令字符串分段并给每段进行标号,标号从0开始.第0号为程序名字,从1开始就表示传递给程序的参数.如$0表示程序的名字,$1表示传递给程序的第一个参数,以此类推. 3.2 内部参数 上述过程中的$0是一个

工作流学习——Activiti整体认识二步曲

前言 在上一篇文章中我们将工作流的相关概念.activiti的前世今生.activiti与jbpm的比较进行学习,这篇文章我们正式进行activiti的学习,activiti的整个学习我们主要通过例子的形式来理解.今天我们主要是准备下activiti的环境,在数据库中创建activiti默认的23张表以及activiti核心对象ProcessEngine最后是一个activiti的简单demo. 环境准备 相关软件及版本: jdk版本:Jdk1.8 IDE:eclipse 数据库:mysql A

工作流学习——Activiti整体认识二步曲 (zhuan)

http://blog.csdn.net/zwk626542417/article/details/46594505 *********************************************** 一.前言 在上一篇文章中我们将工作流的相关概念.activiti的前世今生.activiti与jbpm的比较进行学习,这篇文章我们正式进行activiti的学习,activiti的整个学习我们主要通过例子的形式来理解.今天我们主要是准备下activiti的环境,在数据库中创建activ