zoukankan      html  css  js  c++  java
  • activity清除的所有方法

    android 使用多个Intent 进行activity跳转 而没有finish的情况,如何直接退出系统

    就是 N 个 Activity 跳转 没finish(); 最后一个 Activity单击事件 如何推出整个 程序?

    很简单:只要在最后一个需要finish掉之前所有的avtivity 的Intent 上加上这样一句话                                                                       

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//注意本行的FLAG设置

    参考:http://www.open-open.com/home/space-37924-do-blog-id-5805.html

    Android-完全退出当前应用程序的四种方法

     

    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()); 
     系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上 
     <uses-permission android:name="android.permission.RESTART_PACKAGES"></uses-permission>

    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的方法。代码如下:

    view source

    print ?

    01   public class ScreenManager {

    02 private static Stack<Activity> activityStack;

    03 private static ScreenManager instance;

    04 private  ScreenManager(){

    05 }

    06 public static ScreenManager getScreenManager(){

    07  if(instance==null){

    08   instance=new ScreenManager();

    09  }

    10  return instance;

    11 }

    12//退出栈顶Activity

    13 public void popActivity(Activity activity){

    14  if(activity!=null){

    15   activity.finish();

    16   activityStack.remove(activity);

    17   activity=null;

    18  }

    19 }

    20

    21//获得当前栈顶Activity

    22 public Activity currentActivity(){

    23  Activity activity=activityStack.lastElement();

    24  return activity;

    25 }

    26

    27//将当前Activity推入栈中

    28 public void pushActivity(Activity activity){

    29  if(activityStack==null){

    30   activityStack=new Stack<Activity>();

    31  }

    32  activityStack.add(activity);

    33 }

    34 //退出栈中所有Activity

    35 public void popAllActivityExceptOne(Class cls){

    36  while(true){

    37   Activity activity=currentActivity();

    38   if(activity==null){

    39    break;

    40   }

    41   if(activity.getClass().equals(cls) ){

    42    break;

    43   }

    44   popActivity(activity);

    45  }

    46 }

    47}


  • 相关阅读:
    设计模式天天练。
    系统资料库msdb置疑或者不可用的解决方法
    依赖注入IOC
    重载、重写、隐藏的区别
    ASP.NET中的HttpWorkerRequest对像及其应用
    ASP.NET的错误处理机制
    Web.Config
    asp.net 2.0页面生命周期
    FileUpLoad控件上传大容量文件
    大文件上传
  • 原文地址:https://www.cnblogs.com/dandre/p/4507039.html
Copyright © 2011-2022 走看看