大家好,好久不见了,我们在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程序了,所以今天给大家分享的是Android应用开发完全退出程序的通用方法,以前我在网上收了几种方法,但都不能通用,比如:任务管理器方法(ActivityManager):
首先要说明该方法运行在Android 1.5 - 2.1 才可以(不过蛮好用的撒!),2.2以后就不行了,同时需要加如下权限:
- <uses-permissionandroid:name="android.permission.RESTART_PACKAGES"/>
用法只有如下两行代码:
- ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
-
am.restartPackage("packagename");
上面要是2.2以后能通用就非常完美了,可是结果你懂得。。。
所以为了通用想到了另外一种方法,就是当我们点击“退出程序”菜单时,可以从当前Activity跳转到主Activity(就是我们打开程序最先启动的那个Activity),通过Intent告诉主Activity我要退出程序,然后主Activity调用finish()方法即可。由于这一过程很短暂,以致于我们没观察到Activity有任何切换就退出程序了!
同样为了让大家更容易理解,我做了一个Demo.为了省事,程序运行时我直接就从MainActivity跳转到BActivity,在BActivity有个“退出程序”菜单,点击会退出程序。具体过程如下:
首先第一步:新建一个Android工程,命名为ExitDemo(目录结构图如下)
第二步:定义一个工具类Sysutil用来退出程序,这样定义好处可以在多个Activity的时候复用,代码如下:
- packagecom.tutor.exit;
-
importandroid.app.ActivityManager;
-
importandroid.content.Context;
-
importandroid.content.Intent;
-
publicclassSysUtil{
-
publicstaticfinalintEXIT_APPLICATION=0x0001;
-
privateContextmContext;
-
publicSysUtil(Contextcontext){
-
this.mContext=context;
- }
-
-
publicvoidexit(){
-
-
-
-
IntentmIntent=newIntent();
-
mIntent.setClass(mContext,MainActivity.class);
-
- mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
-
mIntent.putExtra("flag",EXIT_APPLICATION);
- mContext.startActivity(mIntent);
- }
- }
第三步:修改MainActivity.java,代码如下:
- packagecom.tutor.exit;
-
importandroid.app.Activity;
-
importandroid.content.Intent;
-
importandroid.os.Bundle;
-
publicclassMainActivityextendsActivity{
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
-
-
@Override
-
protectedvoidonStart(){
-
intflag=getIntent().getIntExtra("flag",0);
-
if(flag==SysUtil.EXIT_APPLICATION){
- finish();
- }
-
super.onResume();
- }
-
-
@Override
-
protectedvoidonResume(){
-
IntentmIntent=newIntent();
-
mIntent.setClass(this,BActivity.class);
- startActivity(mIntent);
-
super.onStart();
- }
-
-
@Override
-
protectedvoidonNewIntent(Intentintent){
-
intflag=getIntent().getIntExtra("flag",0);
-
if(flag==SysUtil.EXIT_APPLICATION){
- finish();
- }
-
super.onNewIntent(intent);
- }
- }
第四步:新建一个Activity命名为BAcivity.java,记得要在配置文件里申明哦~代码如下:
- packagecom.tutor.exit;
-
importandroid.app.Activity;
-
importandroid.os.Bundle;
-
importandroid.view.Menu;
-
importandroid.view.MenuItem;
-
importandroid.widget.TextView;
-
publicclassBActivityextendsActivity{
-
publicstaticfinalintMENU_EXITAPPLICATION=Menu.FIRST;
-
@Override
-
protectedvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
TextViewmTextView=newTextView(this);
-
mTextView.setText("WelcometoFrankie'sblog.");
- setContentView(mTextView);
- }
-
@Override
-
publicbooleanonCreateOptionsMenu(Menumenu){
-
menu.add(0,MENU_EXITAPPLICATION,0,"退出程序");
-
returnsuper.onCreateOptionsMenu(menu);
- }
-
@Override
-
publicbooleanonOptionsItemSelected(MenuItemitem){
-
if(item.getItemId()==MENU_EXITAPPLICATION){
-
-
SysUtilmSysUtil=newSysUtil(BActivity.this);
- mSysUtil.exit();
- }
-
returnsuper.onOptionsItemSelected(item);
- }
- }
第五步:运行程序,直接进入了BActivity,点击菜单效果如下:
点击退出程序菜单,管你SDK是什么版本,就可以完全退出程序啦,有木有!有木有!呵呵~
这里要说明一下,如果我们的主Activity是单例模式的话,也就是launcheMode="singleTop|singleTask"如下面代码:
- <activityandroid:name=".MainActivity"
-
android:launchMode="singleTop"
-
android:label="@string/app_name">
- <intent-filter>
-
<actionandroid:name="android.intent.action.MAIN"/>
-
<categoryandroid:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
这时MainActivity执行了onNewIntent()方法,退出程序 在这里完成,以上只是我个人的片面理解,如果大家有更好的通用方法,可以告诉我,相互学习,谢谢大家!!!
分享到:
相关推荐
在Android应用程序UI架构中,还有一个重要的服务WindowManagerService,它负责统一管理协调系统中的所有窗口,例如管理窗口的大小、位置、打开和关闭等。这个PPT讲Android应用程序的Surface机制,阐述Activity、...
Android应用开发多个activity完全退出程序方法,亲测可用
实现完全退出应用程序功能,停止所有应用程序的Activity,停止Service
《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、...
一键关闭android应用程序工具类 1.编写一个class继承Application public class AppClose extends Application { private List<Activity> mainActivity = new ArrayList(); ....................
完整的约会应用程序(Android和iOS版本的应用程序)具有丰富的功能和Web版本。随着约会应用程序的人可以找到新的朋友和沟通在真实的时间,使礼物给对方,等等。响应式网站版本将允许其他操作系统(例如:Windows移动...
Android应用管理器,包含获取系统已安装应用程序,获取系统正在运行应用程序,打开应用,关闭应用,卸载应用,GridView分页,隐藏应用,一键清理等功能,是我的毕业设计。
用于Android应用程序的外部记录器库。 您可以将日志保存在应用程序的任何组件中(活动,服务,片段)。 即使退出应用程序或关闭设备,数据也将存储在内存中。
用户可以随时切换每个应用程序,在不需要应用程序时,也需要用户来关闭应用程序。 但是Android操作系统的应用程序却不是采用这种方式。 Android中每次只有一个应用程序运行在最前面,除了状态栏的位置,当前应用...
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中...
最终用户不再需要担心哪些应用程序是活动的,也不必在运行新程序前先关闭原有的一些程序。Android针对低能耗、低内存的设备进行了优化,这种根本性的优化是之前的平台从未尝试过的。 高质量的图形和声音。将类似...
摘要:用C#能开发RFID-android...C#真的能开发android程序吗?C#开发android程序的工具是什么?开发步骤、方法以及流程是怎样的?android开发者一定会提出这些疑问,本文一一解答这些疑问,为安卓初学者提供入门指引。
Adobe Flash Builder 4.5 Android Air 程序开发系列 之四 打开与关闭应用程序是的保存数据
Shutdown一个交互式处理应用程序关闭的Android库
应用程序基础Application Fundamentals 4 关键类 4 应用程序组件 5 激活组件:intent 7 关闭组件 7 manifest文件 8 Intent过滤器 8 Activity和任务 10 Affinity(吸引力)和新任务 11 加载模式 12 清理堆栈 13 启动...
本文实例讲述了Android完全退出应用程序的方法。分享给大家供大家参考。具体如下: 在Android中,如果想退出Android程序,一般都是调用finish()、System.exit(0)、android.os.Process.killProcess(android.os....
我们在使用某些Android应用的时候,可能会发现安装了某应用以后,会有一些服务也会随之运行。而且,这些服务每次都会随着手机开机而启动。有的服务做的更绝,当用户在运行的服务中手动停止该服务以后,过了一段时间...
androidandroidandroidandroid
我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序,没有释放系统资源。有时跳转的...