标签:
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();
}
}
Menu学习,和如何实现一步关闭所有的activity退出应用程序
标签:
原文地址:http://www.cnblogs.com/bokeofzp/p/4760639.html