首页 > 编程语言 >android中退出当前应用程序的四种…

android中退出当前应用程序的四种…

时间:2023-04-30 11:02:21浏览次数:47  
标签:ScreenManager Activity 应用程序 activityStack Intent activity android public 四种


Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。

  1. Dalvik VM的本地方法

android.os.Process.killProcess(android.os.Process.myPid()) //获取PID
   System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出

  2. 任务管理器方法

  首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限

 

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
   am.restartPackage(getPackageName());

  系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上

  3. 根据Activity的声明周期

   3. 我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

  在A窗口中使用下面的代码调用B窗口

 

Intent intent = new Intent();
   intent.setClass(Android123.this, CWJ.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置
   startActivity(intent);

  接下来在B窗口中需要退出时直接使用finish方法即可全部退出。

  4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:

public class ScreenManager {
   private static Stack activityStack;
   private static ScreenManager instance;
   private ScreenManager(){
   }
   public static ScreenManager getScreenManager(){
   instance=new ScreenManager();
   }
   return instance;
   }
   //退出栈顶Activity
   public void popActivity(Activity activity){
   activity.finish();
   activityStack.remove(activity);
   activity=null;
   }
   }
   //获得当前栈顶Activity
   public Activity currentActivity(){
   Activity activity=activityStack.lastElement();
   return activity;
   }
   //将当前Activity推入栈中
   public void pushActivity(Activity activity){
   activityStack=new Stack();
   }
   activityStack.add(activity);
   }
   //退出栈中所有Activity
   public void popAllActivityExceptOne(Class cls){
   while(true){
   Activity activity=currentActivity();
   break;
   }
   break;
   }
   popActivity(activity);
   }
   }
   }

标签:ScreenManager,Activity,应用程序,activityStack,Intent,activity,android,public,四种
From: https://blog.51cto.com/u_548275/6237801

相关文章

  • android TextView属性大全
    android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。android:bufferType指定get......
  • Android Bitmap内存溢出问题解释
    Android平台在图片处理方面经常会出现OOM的问题,在去年开发的一个项目中,我也一直被这个问题所困扰,在这方面也搜集了许多的资料,今天仅仅针对Android平台的Bitmap说事儿,今后再对内存的问题做详细的探讨,android平台对图片解码这块确实设置的有内存上限,在解码Bitmap的时候android平台会......
  • Android开发中立即停止AsyncTask和…
    程序开发中经常会有立即停止线程运行的需要,而通过api是没有办法实现这个目的的,因此对于这个情况,我们需要采取一些“特殊”的方式来实现:  1,判断标志位的办法:  我们要知道在java的线程中,没有办法停止一个正在运行中的线程。在Android的AsyncTask中也是一样的。如果必须要停......
  • android上传base64的字符图片
    一般来说,目前在手机端上传图片,方法挺多的,不过常用的就是一个文件流,另一个是二进制转base64的字符流,下面分享一下方法网络上都是千篇一律的写法,对于上传过程中失败的问题也很少提及,上传失败的bug,主要的原因当然是编码字符的问题了,一般网上都没有介绍,记得要将base64的字符串转......
  • Android 用户界面---样式和主…
    样式是给View或Window指定外观和格式的属性集合。样式能够指定如高、边距、字体颜色、字体尺寸、背景颜色等属性。样式被定义在一个与布局XML文件分开的XML资源文件中。Android中的样式与Web设计中的层叠式样表类似,允许与内容分开设计。例如,通过使用样式,可以把下面这个布局XML转换......
  • Android应用程序的安装位置(二)
    不应该安装在外部存储器上的应用程序当用户启用USB存储器来跟计算机共享文件时(或者是卸载或移除外部存储器),任何被安装在外部存储器上,并且当前正在运行的应用程序都会被杀死。在USB存储器被禁用和外部存储器被重新挂载到设备上之前,系统不会有效的感知到引用程序的存在。除了终止应......
  • Django4全栈进阶之路23 项目实战(报修类型表):应用程序命名空间app_name和分页组件pagina
    1、应用程序命名空间app_namefromdjango.urlsimportpathfrom.importviewsfrom.viewsimportRepairDetailViewapp_name='repair'urlpatterns=[path('repair_types/',views.RepairTypeListView.as_view(),name='repair_type_list�......
  • Java中的四种进制
    1.对于整数,有四种表示方式二进制:0,1,满2进1,以0b或者0B开头十进制:0-9,满10进1八进制:0-7,满8进1,以数字0开头十六进制:0-9及A(10)-F(15),满16进1,以0x或者0X开头表示,此处的A-F不区分大小写......
  • uniapp android app 铃声静音,真正的免打扰
    需要加入这个权限:<uses-permissionandroid:name=\"android.permission.ACCESS_NOTIFICATION_POLICY\"/>代码:/***设置铃声为静音,媒体音量不变(免打扰)**/setDisturb(){//#ifd......
  • Unity中Android API 28之后无法HTTP请求
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复log,获取最新版运行时查看日志的工具。小新:“最近我升级到AndroidAPILevel28之后,发现发布的安卓包,网络请求都不通了,这是咋回事啊?”大智:“遇到这种问题,调试的时候首先去看日志,你研究运行日......