做过Android开发的人都知道,应用程序点击返回键 或者 代码显示调用了Activity.finish()方法都无法完全退出,通过任务管理工具可以看到他们还在进程中。
下面我将分享
OSChina.NET
Android版客户端 完全退出程序的方法:
1.
添加权限
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
2.
导入AppManager工具类
AppManager类是一个自定义的工具类,作用是将应用程序所有启动的Activity都添加到堆栈,最终退出应用程序时全部释放掉Activity。
完整的AppManager类代码:
package net.oschina.app;
import java.util.Stack;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
* 应用程序Activity管理类
* @author liux
*/
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
if(activity!=null){
activity.finish();
activity=null;
}
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}
3.
使用AppManager工具类
Activity启动时,在的onCreate方法里面,将该Activity实例添加到AppManager的堆栈
AppManager.getAppManager().addActivity(this);
需要退出程序时,调用
AppManager.getAppManager().AppExit(this);
如果大家有什么疑问的话,欢迎在下面回帖一起探讨。
PS:
OSC Android客户端下载地址:
http://www.oschina.net/uploads/osc.apk
OSC iPhone客户端下载地址:
http://www.oschina.net/uploads/osc.ipa
OSC Windows Phone客户端下载地址:
http://www.oschina.net/uploads/osc.xap
转载:http://www.oschina.net/question/157182_59222
分享到:
相关推荐
Gnome-OSC-HS--2-themes,包含Gnome-OSC-HS-(transparent)和Gnome-OSC-HS-(transparent),用于Ubuntu 18.04,仿mac风格,直接放入/usr/share/themes下就可以了使用
【标题】"osc-android-app2.0改动一下" 指的是开源中国(Open Source China)的Android应用程序的2.0版本进行了一些更新和优化,以便兼容Android Studio 1.3的Preview 2.0版本。这个过程通常涉及到对源代码的修改、...
《码云Android客户端:git-osc-android-master深度解析》 码云作为国内知名的开源托管平台,为开发者提供了便捷的代码管理服务。其中,"git-osc-android-master.zip" 是码云针对Android平台推出的官方客户端源代码...
【标题】"oschina-git-osc-android-master"指的是一个开源中国的Android项目,它可能是某个开源社区的Android客户端或者工具库的源代码。这个项目的名字暗示它可能是从Git开源中国(OSC)获取的,并且是主分支的源码...
官方离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Gnome-OSC-HS--2-themes.tar.xz ubuntu18.04 仿 mac 主题
《Python库osc-placement详解》 在Python的世界里,丰富的库是其强大功能的重要支撑。本文将深入探讨一个名为"osc-placement"的Python库,版本为1.5.0,它被封装在一个名为"osc-placement-1.5.0.tar.gz"的压缩包中...
【标题】"mumu-osc-nicefish-ionic-master_ionic_agou3k_移动端" 指的是一款基于 Ionic 框架开发的移动应用项目,该项目在 "mumu-osc" 开源社区中被创建,并且由 "agou3k" 进行了维护。"nicefish-ionic" 是此项目的...
OSC-2x6-WI-A OSC-2x6-WI-B OSC-2x6-WS OSC-3x8-LI OSC-3x8-WI-A OSC-3x8-WI-B OSC-3x8-WS OSC-3x10-LI OSC-3x10-WI-A OSC-3x10-WI-B OSC-3x10-WS PKM13EPY SW-58010PL-LI SW-58010PL-WI XT-SMT2 XT-SMT3 XT-SMT4 ...
python库。 资源全名:osc-docker-builder-1.7.tar.gz
"mumu-osc-OpenWMS-Frontend-master_back_示范_"这个标题表明这是一个与OpenWMS(开放仓库管理系统)前端相关的项目,可能是某个开发者或团队为了展示后端管理系统的最佳实践而创建的一个备份示例。"back"标签强调了...
晶体晶振Altium封装库AD三维视图PCB封装库(2D3D封装库),封装列表如下:Component Count : 38 Component Name ----------------------------------------------- OSC 455E-LI OSC 455E-WI ...OSC-3x10-WS
【pt-osc在线重建表导致死锁的分析及优化方案】 在进行数据库维护时,特别是在业务低峰期使用像pt-online-schema-change(pt-osc)这样的工具进行在线DDL操作时,可能会遇到死锁问题,这可能导致业务SQL被回滚,...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
晶振晶体2D3D封装大全(38个) Component Count : 38 Component Name ----------------------------------------------- OSC 455E-LI OSC 455E-WI OSC 1612-4P OSC 2025-4P OSC 3215-2P ...OSC-3x10-WS
晶体晶振3D封装大全PCB库+原理图库(AD集成库,封装带3D视图),Altium Designer的集成封装库,(SchLib+.PcbLib格式的,带3D视图,非常实用。 Component Count : 38 Component Name ...OSC-3x10-WS
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装