`
dengbaoleng
  • 浏览: 1129273 次
文章分类
社区版块
存档分类
最新评论

Android 应用程序多Activity跳转之后退出整个程序

 
阅读更多

在应用中肯定遇到有这样的问题,在应用中在于多的Activity中跳转,这些Activity都存在Activity栈中了。所以按返回键的时候都是一个一个的将原来的Activity弹回。如果我们想捕获到back事件之后直接退出整个程序,就要思考了。特别是2.2之后的安全机制考虑之后。

粘贴点代码,以备之后使用。

Java代码 复制代码收藏代码
  1. packagecom.jftt;
  2. importandroid.app.Activity;
  3. importandroid.app.ActivityManager;
  4. importandroid.app.AlertDialog;
  5. importandroid.content.Context;
  6. importandroid.content.DialogInterface;
  7. importandroid.content.Intent;
  8. importandroid.os.Bundle;
  9. importandroid.util.Log;
  10. importandroid.view.KeyEvent;
  11. importandroid.view.View;
  12. importandroid.view.View.OnClickListener;
  13. importandroid.widget.Button;
  14. publicclassTestLogoutextendsActivity{
  15. publicstaticfinalStringTAG=TestLogout.class.getSimpleName();
  16. privateButtonbtn1;
  17. privateButtonbtn2;
  18. privateButtonbtn3;
  19. privateButtonbtn4;
  20. privateButtonbtn5;
  21. privateButtongo;
  22. @Override
  23. protectedvoidonCreate(BundlesavedInstanceState){
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.logout);
  26. this.onStart();
  27. btn1=(Button)findViewById(R.id.btn1);
  28. btn1.setOnClickListener(newOnClickListener(){
  29. @Override
  30. publicvoidonClick(Viewv){
  31. android.os.Process.killProcess(android.os.Process.myPid());//获取PID
  32. }
  33. });
  34. btn2=(Button)findViewById(R.id.btn2);
  35. btn2.setOnClickListener(newOnClickListener(){
  36. @Override
  37. publicvoidonClick(Viewv){
  38. System.exit(0);//常规java、c#的标准退出法,返回值为0代表正常退出
  39. }
  40. });
  41. btn3=(Button)findViewById(R.id.btn3);
  42. btn3.setOnClickListener(newOnClickListener(){
  43. @Override
  44. publicvoidonClick(Viewv){
  45. Log.i(TAG,"close"+getPackageName());
  46. ActivityManageram=(ActivityManager)TestLogout.this.getSystemService(Context.ACTIVITY_SERVICE);
  47. am.restartPackage(getPackageName());
  48. //am.killBackgroundProcesses(getPackageName());
  49. }
  50. });
  51. btn4=(Button)findViewById(R.id.btn4);
  52. btn4.setOnClickListener(newOnClickListener(){
  53. @Override
  54. publicvoidonClick(Viewv){
  55. Intentintent=newIntent();
  56. //intent.setClass((B或者C或者D).this,A.class);
  57. intent.setClass(TestLogout.this,TestLogout.class);
  58. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  59. intent.putExtra("flag",1);
  60. startActivity(intent);
  61. }
  62. });
  63. //此方法并未杀掉应用程序而是把launcher调起
  64. btn5=(Button)findViewById(R.id.btn5);
  65. btn5.setOnClickListener(newOnClickListener(){
  66. @Override
  67. publicvoidonClick(Viewv){
  68. IntentstartMain=newIntent(Intent.ACTION_MAIN);
  69. startMain.addCategory(Intent.CATEGORY_HOME);
  70. startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  71. startActivity(startMain);
  72. }
  73. });
  74. go=(Button)findViewById(R.id.go);
  75. go.setOnClickListener(newOnClickListener(){
  76. @Override
  77. publicvoidonClick(Viewv){
  78. Intentintent=newIntent(TestLogout.this,TestLogout.class);
  79. //intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  80. startActivity(intent);
  81. }
  82. });
  83. }
  84. protectedvoidonStart(){
  85. super.onStart();
  86. Intentintent=getIntent();
  87. intx=intent.getIntExtra("flag",-1);
  88. if(x==0){
  89. finish();
  90. }
  91. }
  92. @Override
  93. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  94. if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){
  95. AlertDialog.BuilderalertbBuilder=newAlertDialog.Builder(this);
  96. alertbBuilder.setIcon(R.drawable.icon).setTitle("友情提示...").setMessage("你确定要离开吗?");
  97. alertbBuilder.setPositiveButton("确定",newDialogInterface.OnClickListener(){
  98. @Override
  99. publicvoidonClick(DialogInterfacedialog,intwhich){
  100. //结束这个Activity
  101. intnPid=android.os.Process.myPid();
  102. android.os.Process.killProcess(nPid);
  103. }
  104. });
  105. alertbBuilder.setNegativeButton("取消",newDialogInterface.OnClickListener(){
  106. @Override
  107. publicvoidonClick(DialogInterfacedialog,intwhich){
  108. dialog.cancel();
  109. }
  110. }).create();
  111. alertbBuilder.show();
  112. }
  113. returntrue;
  114. }
  115. }
Java代码 复制代码收藏代码
  1. packagecom.jftt;
  2. importjava.util.Stack;
  3. importandroid.app.Activity;
  4. publicclassActiivtyStack{
  5. privatestaticStack<Activity>mActivityStack;
  6. privatestaticActiivtyStackinstance;
  7. privateActiivtyStack(){
  8. }
  9. publicstaticActiivtyStackgetScreenManager(){
  10. if(instance==null){
  11. instance=newActiivtyStack();
  12. }
  13. returninstance;
  14. }
  15. //退出栈顶Activity
  16. publicvoidpopActivity(Activityactivity){
  17. if(activity!=null){
  18. activity.finish();
  19. mActivityStack.remove(activity);
  20. //mActivityStack.pop();
  21. activity=null;
  22. }
  23. }
  24. //获得当前栈顶Activity
  25. publicActivitycurrentActivity(){
  26. Activityactivity=mActivityStack.lastElement();
  27. //Activityactivity=mActivityStack.pop();
  28. returnactivity;
  29. }
  30. //将当前Activity推入栈中
  31. publicvoidpushActivity(Activityactivity){
  32. if(mActivityStack==null){
  33. mActivityStack=newStack<Activity>();
  34. }
  35. mActivityStack.add(activity);
  36. //mActivityStack.push(activity);
  37. }
  38. //退出栈中所有Activity
  39. publicvoidpopAllActivityExceptOne(Class<Activity>cls){
  40. while(true){
  41. Activityactivity=currentActivity();
  42. if(activity==null){
  43. break;
  44. }
  45. if(activity.getClass().equals(cls)){
  46. break;
  47. }
  48. popActivity(activity);
  49. }
  50. }
  51. }

logout.xml

Xml代码 复制代码收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Button
  8. android:id="@+id/btn1"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="logoutbutton1"
  12. />
  13. <Button
  14. android:id="@+id/btn2"
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:text="logoutbutton2"
  18. />
  19. <Button
  20. android:id="@+id/btn3"
  21. android:layout_width="fill_parent"
  22. android:layout_height="wrap_content"
  23. android:text="logoutbutton3"
  24. />
  25. <Button
  26. android:id="@+id/btn4"
  27. android:layout_width="fill_parent"
  28. android:layout_height="wrap_content"
  29. android:text="gotofirst"
  30. />
  31. <Button
  32. android:id="@+id/btn5"
  33. android:layout_width="fill_parent"
  34. android:layout_height="wrap_content"
  35. android:text="gotolauncher"
  36. />
  37. <Button
  38. android:id="@+id/go"
  39. android:layout_width="fill_parent"
  40. android:layout_height="wrap_content"
  41. android:text="goanotheractivity"
  42. />
  43. <!--
  44. <EditText
  45. android:id="@+id/et01"
  46. android:layout_width="fill_parent"
  47. android:layout_height="fill_parent"
  48. />
  49. <ImageView
  50. android:id="@+id/iv01"
  51. android:layout_width="wrap_content"
  52. android:layout_height="wrap_content"
  53. />
  54. -->
  55. </LinearLayout>

manifest中的权限:

Xml代码 复制代码收藏代码
  1. <uses-permissionandroid:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
  2. <uses-permissionandroid:name="android.permission.RESTART_PACKAGE"/>
分享到:
评论

相关推荐

    android 退出app 退出应用程序

    2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...

    Android编程之退出整个应用程序的方法

    本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接...

    Android的Activity跳转动画各种效果整理

    大家使用Android的原生UI都知道,Android的Activity跳转就是很生硬的切换界面。其实Android的Activity跳转可以设置各种动画。下面给大家看看效果: 实现非常简单,用overridePendingtransition(int inId, int outId)...

    安卓小程序页面跳转,实现界面跳转

    支持android studio上运行,简单的安卓界面跳转,点击两次返回可退出安卓程序界面,这是这样子呀呀呀呀

    android 完全退出应用程序实现代码

    android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中...

    Android面试题-Activity A跳转Activity B,再按返回键,生命周期执行的顺序?

    Activity A跳转Activity B,再按返回键,A、B的生命周期执行顺序是什么? 当听到这个题目的时候,我得意地笑了笑,对于Activity的生命周期已经记熟的我,心想,为什么不直接问Activity的生命周期呢?于是想当然的说...

    Android 退出应用程序的实现方法

     android 退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B 或C 中...

    activity跳转华丽的过渡效果

    注意,切换方法overridePendingTransition只能在startActivity和finish方法之后调用。 第一个参数为第一个Activity离开时的动画,第二参数为所进入的Activity的动画效果 淡入淡出效果 overridePendingTransition(R....

    activity相互跳转退不出去

    两个activity 相互跳转,按返回键的时候重复跳转的步骤,退不出去,所以在这里加了个容器,把每个activity都添加到这个容器中,在退出程序的时候就调用这个容器把这些activity全部关闭。

    android的activity跳转到另一个activity

    当然,据网上有人将要比较安全的实现关闭程序的功能也不是挺简单的,因为android有专门的退出键返回键等。所以该Close按钮暂时没去实现它。我的第1个activity为HelloworldActivity,第2个activity为NextActivity.实验...

    android中实现完全退出程序方法(退出所有activity)

    这是一个很多很多人都 会遇到的问题,我也试过了很...当需要退出程序的时候就发送一条关闭activity的广播,这样所有的activity都会接收到,然后所有activity都会自己finish了。 代码如下: package com.example.exitsy

    Activity跳转时生命周期跟踪的实例

    android应用当中Activity间相互跳转比较常见。本文将通过例子跟踪一下2个Activity间跳转过程中生命周期的变化过程。 整个操作过程如下图所示: 1. 打开应用,自动开启First Activity; 2. 按下“Jump Button”按钮...

    activty活动管理

    当应用程序跳转到SecondActivity时,我想退出应用程序,发现,我要连续点击back三次才能退出应用程序,(不太了解活动栈的童鞋,先百度一下活动栈是什么,我简要说一下,活动栈,是android系统维护的一个activity栈...

    安卓activity跳转华丽过渡效果

    安卓activity跳转华丽过渡效果,Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画。{它包括两个部分:一部分是第一个activity退出时的动画;另外一部分时第二个activity进入时的动画; 在...

    Android Activity跳转动画效果

    Activity的跳转动画在5.0的时候做了一个重大的突破,下面来看一下吧 1.5.0之前的overridePendingTransition 相信大家对OverridePendingTransition还是很熟悉的,使用方法也是很简单就是 //fade_in是第二个界面的进入...

    Android在线考试.zip

    按钮“退出程序”,关闭APP 进入Android题目界面后,依次布局两个TextView,一组RadioGroup+RadioButton,一个Button确定答案,一个Texview显示结果,一个Button“下一题”,跳转到考试结束界面。 最后考试...

    Android课程设计---基于Android系统的音乐播放器设计与实现.doc

    后台播放创建一个类继承service方法,在该类中使其具有播放暂 停下一首上一首的功能的方法,从而是它在各个Activity之间进行跳转的时候为其他的 类提供相应的方法。创建一个新建文件类和过滤文件信息的类,用以存贮...

    期末大作业:Android视频播放器

    此大作业从头到尾每句代码都有自己亲自手敲,程序无任何问题,工具为AndroidStudio, 最后期末成绩95分(因为平时分不高),此作业满足下面所有要求 大作业要求: 1、使用到相对布局和线性布局 2、使用到TextView ...

    一键退出程序

    Activity栈底为透明activity,启动其它activity用的tag为Intent.FLAG_ACTIVITY_SINGLE_TOP, 退出时跳转到透明activity 标签为Intent.FLAG_ACTIVITY_CLEAR_TOP。

Global site tag (gtag.js) - Google Analytics