精华内容
下载资源
问答
  • android安卓app如何彻底结束进程. 光调用finish()是结束不了程序的,程序中的线程依旧在后台运行
  • Android 退出程序

    2015-03-17 12:11:21
    Android 中应用程序Activity管理类:用于Activity管理和应用程序退出。
  • Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法
  • Android Activity 完全结束并退出程序的实例
  • 就在刚才,碰到这个问题,具体问题略!我就是想,结束整个应用程序,jian'xi

    就在刚才,碰到这个问题,具体问题略!我就是想,结束整个应用程序,见下图:

    我想做一个,点击按钮:关闭应用。就可以,结束整个,应用程序的功能。 北风某尸 和 班长小崔给提供了两种解决方案,仔细想想,都有道理!然后,参考了网上的一些代码,成功的将整个应用程序关闭。

    解决思路:

    1、建立List集合,将所有的Acitivty 都存进,集合里——private List<Activity> activityList = new LinkedList<Activity>();

    2、结束整个应用程序时,将遍历集合,将Activity 逐个 kill 。 

    下面是具体实现代码:

    package com.zwhy.networktest;
    
    import java.util.LinkedList;
    import java.util.List;
    
    import android.app.Activity;
    import android.app.Application;
    
    public class ActivityManager extends Application {
    	//建立链表集合
    	private List<Activity> activityList = new LinkedList<Activity>();
    	
    	//用单例模式,保证,这个ActivityManager 在整个应用中只有一个
    	private static ActivityManager instance;
    
    	private ActivityManager() {
    
    	}
    
    	public static ActivityManager getInstance() {
    		if (instance == null) {
    			instance = new ActivityManager();
    		}
    		return instance;
    	}
    
    	//向链表中,添加Activity
    	public void addActivity(Activity activity) {
    		activityList.add(activity);
    	}
    
    	//结束整个应用程序
    	public void exit() {
    		
    		//遍历 链表,依次杀掉各个Activity
    		for (Activity activity : activityList) {
    			if (!activity.isFinishing()) {
    				activity.finish();
    			}
    		}
    		//杀掉,这个应用程序的进程,释放 内存
    		int id = android.os.Process.myPid();
    		if (id != 0) {
    			android.os.Process.killProcess(id);
    		}
    	}
    }
    

    具体使用的时候,需要,在每一个Activity中,获取 ActivityManager 的实例,然后,将Activity,添加到,List 中。


    1、获取 ActivityManager 的实例对象:

    ActivityManager exitM = ActivityManager.getInstance();

    2、添加各个 Activity

    exitM.addActivity(MainActivity.this);


    关闭整个应用程序的时候,只需要,最后一句:

    exitM.exit(); 

    便可 大功告成!



    展开全文
  • Android根据包名停止其他应用程序 1.使用killBackgroundProcesses()方法 首先再AndroidManifest.xml文件中添加权限 然后直接调用stopApp(mContext,packageName)方法 public void stopAppByKill(Context context ,...
  • ![图片说明](https://img-ask.csdn.net/upload/201709/19/1505819892_807303.png) 创建一个注册界面后为什么点击注册以及取消会结束程序
  • 主要介绍了Android根据包名停止其他应用程序,需要的朋友可以参考下
  • Android 关闭应用程序的6种方法

    万次阅读 2015-06-16 14:57:52
    1.方法一killProcess结束进程 android.os.Process.killProcess(android.os.Process.myPid());android中所有的activity都在主进程中,在...当你Kill掉当前程序的进程时也就是说整个程序的所有线程都会结束,Ser

    1.方法一killProcess结束进程

    android.os.Process.killProcess(android.os.Process.myPid());
    android中所有的activity都在主进程中,在Androidmanifest.xml中可以设置成启动不同进程,Service不是一个单独的进程也不是一个线程。当你Kill掉当前程序的进程时也就是说整个程序的所有线程都会结束,Service也会停止,整个程序完全退出。

    2.方法二exit结束java虚拟机

    System.exit(0);
    这个方法是用来结束当前正在运行中的java虚拟机。如何status是非零参数,那么表示是非正常退出。当调用System.exit(0)时,杀死了整个进程,这时候活动所占的资源也会被释放。 和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层。进一步探索System.exit被调用后的行为,它在虚拟机在退出前会执行两个清除任务。第一,它会执行所有通过Runtime.addShutdownHook注册的shutdownhooks.它能有效的释放JVM之外的资源。第二,执行清除任务,运行相关的finalizer方法终结对象。 在android手机中查看当前正在运行的进程时可以发现还可以查看"后台缓存的进程",你会发现很多退出了的程序还在后台缓存的进程中,如果不要让程序在后台缓存那么就可以用System.exit(0);来退出程序了,可以清除后台缓存的本进程,对于有些手机也是没有用的。这是退出Java程序的方法,也可以用来退出Android。

    3.方法三通过activity管理器重启,这个方法已经过时,不建议再使用

    ActivityManager activitymanager= (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
    activitymanager.restartPackage(getPackageName());
    注意:需要注册的权限<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-  permission>

    在android2.2版本之后则不能再使用restartPackage()方法,而应该使用killBackgroundProcesses()方法

    ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);       
    manager.killBackgroundProcesses(getPackageName()); 
    //需要在xml中加入权限声明    
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> 

    注意:在android2.2以后,如果服务在ondestroy里加上了start自己,用kill backgroudprocess通常无法结束自己。

    定外一种方法:利用反射

    Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);  
    forceStopPackage.setAccessible(true);  
    forceStopPackage.invoke(am, yourpkgname);  
    
    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission>
    
    需要在manifest里加上shareduid定义
    android:sharedUserId="android.uid.system"

    并且采用系统platform签名

    因为需要用FORCE_STOP_PACKAGES权限,该权限只赋予系统签名级程序

    4.方法四根据Activity的生命周期

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

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

    5.方法五finish()将活动推向后台

    finish();
    finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理;

    6.方法六 比较常用的方法,使用Activity栈管理Activity

    package com.example.test;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Stack;
    
    import android.app.Activity;
    import android.content.Context;
    
    /**
     * @author Administrator Panca 上午11:19:49
     *
     *	描述: 应用程序Activity管理类:用于Activity管理和应用程序退出
     *
     * Tel: 15211164134 QQ: 643691522
     */
    public class ActManager {
    	
    	private static Stack<Activity> activityStack;
    	private static ActManager instance;
    	
    	/**
    	 * 单例模式 创建单一实例
    	 * @return
    	 */
    	public static ActManager getAppManager() {
    		if (instance == null) {
    			instance = new ActManager();
    		}
    		return instance;
    	}
    
    	/**
    	 * 初始化Stack<Activity>
    	 */
    	private void initActivityStack() {
    		if (activityStack == null) {
    			activityStack = new Stack<Activity>();
    		}
    	}
    	
    	/**
    	 * 添加Activity到堆栈
    	 * @param activity
    	 */
    	public void addActivity(Activity activity) {
    		initActivityStack();
    		activityStack.add(activity);
    	}
    	
    	/**
    	 * 获取当前Activity(堆栈中最后一个压入的)
    	 * @return
    	 */
    	public Activity currentActivity() {
    		Activity activity = activityStack.lastElement();
    		return activity;
    	}
    	
    	/**
    	 * 结束指定的Activity
    	 */
    	public void finishActivity(Activity activity) {
    		if (activity != null) {
    			activityStack.remove(activity);
    			activity.finish();
    			activity = null;
    		}
    	}
    	
    	/**
    	 * 结束当前Activity(堆栈中最后一个压入的)
    	 */
    	public void finishActivity() {
    		//获取到当前Activity
    		Activity activity = activityStack.lastElement();
    		//结束指定Activity
    		finishActivity(activity);
    	}
    	
    	/**
    	 * 结束指定类名的Activity
    	 */
    	public void finishActivity(Class<?> cls) {
    		List<Activity> activities = new ArrayList<Activity>();
    		for (Activity activity : activityStack) {
    			if (activity.getClass().equals(cls)) {
    				// finishActivity(activity);
    				activities.add(activity);
    			}
    		}
    		// 结束所有类名相同activity
    		activityStack.removeAll(activities);
    		for (Activity activity : activities) {
    			finishActivity(activity);
    		}
    	}
    	
    	/**
    	 * 结束所有Activity
    	 */
    	public void finishAllActivity() {
    		for (int i = 0, size = activityStack.size(); i < size; i++) {
    			if (null != activityStack.get(i)) {
    				Activity activity = activityStack.get(i);
    				if (!activity.isFinishing()) {
    					activity.finish();
    				}
    			}
    		}
    		activityStack.clear();
    	}
    	
    	/**
    	 * 退出应用程序
    	 * 这里关闭的是所有的Activity,没有关闭Activity之外的其他组件;
    	 * android.os.Process.killProcess(android.os.Process.myPid())
    	 * 杀死进程关闭了整个应用的所有资源,有时候是不合理的,通常是用
    	 * 堆栈管理Activity;System.exit(0)杀死了整个进程,这时候活动所占的
    	 * 资源也会被释放,它会执行所有通过Runtime.addShutdownHook注册的shutdown hooks.
    	 * 它能有效的释放JVM之外的资源,执行清除任务,运行相关的finalizer方法终结对象,
    	 * 而finish只是退出了Activity。
    	 */
    	public void AppExit(Context context) {
    		try {
    			finishAllActivity();
    			//DalvikVM的本地方法
    			// 杀死该应用进程
    			//android.os.Process.killProcess(android.os.Process.myPid());
    			//System.exit(0);
    			//这些方法如果是放到主Activity就可以退出应用,如果不是主Activity
    			//就是退出当前的Activity
    		} catch (Exception e) {
    		}
    	}
    }
    

    如果是在主Activity中就退出应用,反之就是退出当前Activity。用于学习,大家根据不同的需要使用。

    展开全文
  • AndroidStudio按钮Button退出程序

    千次阅读 2019-09-23 13:51:02
    AndroidStudio 3.1.4 1.创建一个新的项目,项目名称为Button,界面为activity_button.xml 2.打开activity_button.xml 3.点击HelloWorld标签,按Delete删除 4.左侧组件栏选择Common - Button 5.将...

    AndroidStudio 3.1.4

    1.创建一个新的项目,项目名称为Button,界面为activity_button.xml

    2.打开activity_button.xml

    3.点击HelloWorld标签,按Delete删除

    4.左侧组件栏选择Common - Button

    5.将Button组件拖到界面上,大概中间的位置

    6.右侧修改属性

     

    onClick是鼠标点击事件接收函数,后面写代码需要用到

    7.界面完成后的样子

    8.双击java\com.包名.button后面不带括号的

    9.代码编辑框下写代码

    10.代码如下

      showdialog为鼠标按下事件接收函数,这个子程序是在鼠标按下按钮Button时触发

     1     public void showdialog(View view)
     2     {
     3         //定义一个新的对话框对象
     4         AlertDialog.Builder alertdialogbuilder=new AlertDialog.Builder(this);
     5         //设置对话框提示内容
     6         alertdialogbuilder.setMessage("确定要退出程序吗?");
     7         //定义对话框2个按钮标题及接受事件的函数
     8         alertdialogbuilder.setPositiveButton("确定",click1);
     9         alertdialogbuilder.setNegativeButton("取消",click2);
    10         //创建并显示对话框
    11         AlertDialog alertdialog1=alertdialogbuilder.create();
    12         alertdialog1.show();
    13 
    14     }

      监听上面定义的对话框按钮事件

     1     private DialogInterface.OnClickListener click1=new DialogInterface.OnClickListener()
     2     {
     3         //使用该标记是为了增强程序在编译时候的检查,如果该方法并不是一个覆盖父类的方法,在编译时编译器就会报告错误。
     4         @Override
     5 
     6         public void onClick(DialogInterface arg0,int arg1)
     7         {
     8             //当按钮click1被按下时执行结束进程
     9             android.os.Process.killProcess(android.os.Process.myPid());
    10         }
    11     };
    12 
    13     private DialogInterface.OnClickListener click2=new DialogInterface.OnClickListener()
    14     {
    15         @Override
    16         public void onClick(DialogInterface arg0,int arg1)
    17         {
    18             //当按钮click2被按下时则取消操作
    19             arg0.cancel();
    20         }
    21     };
    22 
    23 }

    11.完成编写后点击右上角的AVD Manager

     

    12.选择已下载的模拟器

     

    13.如果没有下载模拟器可以点击下方的Create Virtual Device进行下载

    14.点击Actions下的播放按钮进行运行

    15.成功开启后的样子

    16.点击菜单栏Run下的Run 'app'进行调试

    17.选择刚刚开启的模拟器型号,点击OK

    18.程序会进行编译,如果没有错误在模拟器中会正常显示

    19.点击调试中软件的BUTTON

    20.点击确定,软件正常结束,证明调试成功

    21.可以选择带签名的打包,编程成apk文件啦!Lucky~

    转载于:https://www.cnblogs.com/Shawna/p/9502080.html

    展开全文
  • Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法 1. Dalvik VM的本地方法 ...
    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的声明周期

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



    复制代码代码如下:

     
     * 将项目里面的activity管理起来;退出应用时,清除内存;
     */
    
    public class ActManager {
    
        private static Stack<Activity> activityStack;
        private static ActManager instance;
    
        /**
         * 单例模式 创建单一实例
         *
         * @return
         */
        public static ActManager getAppManager() {
            if (instance == null) {
                instance = new ActManager();
            }
            return instance;
        }
    
        /**
         * 初始化Stack<Activity>
         */
        private static void initActivityStack() {
            if (activityStack == null) {
                activityStack = new Stack<Activity>();
            }
        }
    
        /**
         * 添加Activity到堆栈
         *
         * @param activity
         */
        public static void addActivity(Activity activity) {
            initActivityStack();
            activityStack.add(activity);
        }
    
        /**
         * 获取当前Activity(堆栈中最后一个压入的)
         *
         * @return
         */
        public static Activity currentActivity() {
            Activity activity = activityStack.lastElement();
            return activity;
        }
    
        /**
         * 结束指定的Activity
         */
        public static void finishActivity(Activity activity) {
            if (activity != null) {
                activityStack.remove(activity);
                activity.finish();
                activity = null;
            }
        }
    
        /**
         * 结束当前Activity(堆栈中最后一个压入的)
         */
        public static void finishActivity() {
            //获取到当前Activity
            Activity activity = activityStack.lastElement();
            //结束指定Activity
            finishActivity(activity);
        }
    
        /**
         * 结束指定类名的Activity
         */
        public static void finishActivity(Class<?> cls) {
            List<Activity> activities = new ArrayList<Activity>();
            for (Activity activity : activityStack) {
                if (activity.getClass().equals(cls)) {
                    // finishActivity(activity);
                    activities.add(activity);
                }
            }
            // 结束所有类名相同activity
            activityStack.removeAll(activities);
            for (Activity activity : activities) {
                finishActivity(activity);
            }
        }
    
        /**
         * 结束所有Activity
         */
        public static void finishAllActivity() {
            for (int i = 0, size = activityStack.size(); i < size; i++) {
                if (null != activityStack.get(i)) {
                    Activity activity = activityStack.get(i);
                    if (!activity.isFinishing()) {
                        activity.finish();
                    }
                }
            }
            activityStack.clear();
        }
    
        /**
         * 退出应用程序
         * 这里关闭的是所有的Activity,没有关闭Activity之外的其他组件;
         * android.os.Process.killProcess(android.os.Process.myPid())
         * 杀死进程关闭了整个应用的所有资源,有时候是不合理的,通常是用
         * 堆栈管理Activity;System.exit(0)杀死了整个进程,这时候活动所占的
         * 资源也会被释放,它会执行所有通过Runtime.addShutdownHook注册的shutdown hooks.
         * 它能有效的释放JVM之外的资源,执行清除任务,运行相关的finalizer方法终结对象,
         * finish只是退出了Activity     */
        public static void AppExit(Context context) {
            try {
                finishAllActivity();
                //DalvikVM的本地方法
                // 杀死该应用进程
                //android.os.Process.killProcess(android.os.Process.myPid());
                //System.exit(0);
                //这些方法如果是放到主Activity就可以退出应用,如果不是主Activity
                //就是退出当前的Activity
            } catch (Exception e) {
            }
        }
    }


     

    复制代码代码如下:

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

     
    展开全文
  • 如何把已经安装的安卓应用程序提取对应的APK安卓程序包 接下来看我操作 我们随便提取一个软件的安装包 看我操作 我提取的是系统的APP 这个软件不止可以提取外部APP 连系统本身的APP也可以提取 是不是很强大 我们...
  • 如果整个APP只有一个Activity非常简单,只需要System.exit(0)即可。如果有很多Activity可以写一个单例类,具体方法来源于这个链接: 添加链接描述 只是代码稍微有点问题,我做了一个...import android.app.AlertDial
  • 程序有多个Activity时,采用广播机制完全退出程序
  • 本例子是一个安卓内存管理的小例子,可以获取系统的内存信息、可以获取所有进程的软件名称、可以根据包名判断程序是否是系统程序、可以获取程序的版本号、可以获取程序的签名需要的朋友可以看一下。源码有注释,编码...
  • android 退出app 退出应用程序

    热门讨论 2013-03-18 17:49:10
    2 设置入口activity的启动模式android:launchMode="singleTask",重写onNewIntent方法, 在退出activity时,设置intent.setAction("exit_app");然后跳转到栈底activity, 这样就可以清除栈底之外的所有activity,...
  • 试题一、 选择题1 android虚拟设备的缩写是(AVD)2 Android SDK目前支持的操作系统(DOS)3 Android开发工具插件(ADT)没有提供的开发功能(自动更新)4 Android SDK提供一些开发工具可以把应用软件打包成Android格式文件...
  • android studio 调试安卓程序

    千次阅读 2017-11-28 14:23:51
    先编译好要调试的程序。 1.设置断点 选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。   2.开启调试会话(注意小圆圈上的对号,如果没有对号可能会跳过断点) 点击红色箭头指向的小...
  • Android中实现一键退出应用程序,详细了解请移步:http://blog.csdn.net/zxc514257857/article/details/62104900
  • android 退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid()) 或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C 三个Activity,而想在B 或C 中...
  • Android 退出应用程序的 6 种方式

    万次阅读 2018-06-21 09:48:38
    我们先来看看几种常见的退出方法(不优雅的方式) 一、容器式 建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有...import android.app.Activity; import android.os.Bundle; public cla...
  • Android应用程序运行时会先读取AndroidManifest.xml清单文件,根据清单文件中的配置信息设置应用程序的基本信息,通过过滤条件查找到入口的Activity,并查找到对应的类名,然后创建该类的实例。接着会调用该类的...
  • Android应用结束自身进程的方法

    千次阅读 2017-11-15 11:12:21
    有时候app中会有这样的需求:在某个时机触发后,程序需要销毁所有页面和后台服务,主动结束整个进程。怎么实现呢?管理activity一种方法是:在项目架构搭建时,就可以创建一个BaseActivity,让app的所有页面都继承它...
  • android:noHistory="true" android:excludeFromRecents="true"> 将这两个值置为true android:noHistory 这个属性用于设置在用户离开该Activity,并且它在屏幕上不再可见的时候,它是否应该从Activity的堆栈...
  • Android抽奖小程序

    千次阅读 2019-01-19 12:06:53
    Android的代码结构 Android和JavaSE编程的不同之处就在于Android的组件和逻辑代码是完全分开的,在一个xml文件中添加组件,设置组件的属性,并且对组件进行布局。保存xml文件后,会生成一个R.java文件,R.java文件...
  • Android结束活动退出程序的方法

    千次阅读 2017-01-23 18:36:33
    关闭所有活动有时我们可能会打开了很多个Activity,如果需要在某个页面可以关掉所有的Activity并退出程序。下面提供一个关闭所有Activity的方法, 就是用一个list集合来存储所有Activity1.创建一个ActivityCollector...
  • Android中知道界面是哪个activity,一次结束所有Activity退出程序
  • Android程序闪退解决思路

    千次阅读 2020-07-30 19:20:57
    这几天在做Android程序的实验,完全新手,遇到一些问题,其中最让人头疼的是程序闪退,相信很多人都有点感觉无从下手,特地分享一下我的经验。 首先,做了一个程序,在模拟器上运行,显示 “ *** keeps stopping ”...
  • Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面软件开发网小编就给大家介绍android开发退出程序的几种方法。 1、...
  • Android基础小程序

    万次阅读 2017-04-20 09:48:59
    android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp"> android:layout_width="match_parent" android:layout_height="wrap_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 142,813
精华内容 57,125
关键字:

安卓如何结束程序