欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 退出程序的若干方法总结

程序员文章站 2023-01-02 07:58:46
android程序有很多activity,比如说主窗口a,调用了子窗口b,如果在b中直接finish(), 接下里显示的是a。在b中如何关闭整个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());

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

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);
}
}
}