android退出应用(Android退出应用程序方法总结[通俗易懂])
一、Android 应用退出的几种方法
android退出运用,主要有3种常用方案。
分别是:
杀进程,暴力退出app。
系统退出,强制性退出。
activity管理(栈),合理性退出。
【主要原理】
主要是通过通知系统杀死运用,或者移除所有的界面资源达到退出运用的目的。
【详细实现】
杀进程,暴力退出app。
优缺点:暴力,但是容易丢失数据,可能会引起不必要的问题。
代码如下:
android.os.Process.killProcess(android.os.Process.myPid());
系统退出,强制性退出。
优缺点:相对第一种方法温和点,谨慎使用。
代码如下:
System.exit(0);
activity管理(栈),合理性退出。
优缺点:推荐使用,一个个移除apk打开的所有资源,达到退出apk的目的。
代码如下:
public class ScreenManager{
private static Stack<Activity> activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
//退出栈顶Activity
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//获得当前栈顶Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//将当前Activity推入栈中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
//退出栈中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls)){
break;
}
popActivity(activity);
}
}
}
【最后】
推荐使用第三种方案,方便管理退出。
二、Android 怎么退出整个应用程序
1.后面添加了一个菜单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附代码:
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
MenuItem item= menu.add(Menu.NONE, Menu.NONE, Menu.NONE,"Exit");
item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener()
{
public boolean onMenuItemClick(MenuItem item)
{
System.exit(0);
return true;
}
});
return true;
}
2.这样太不方便,每次退出界面之后应用程序还在运行,
网上提供了几种方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this);添加当前Acitivity到ancivitylist里面去,最后在想退出的时候调用SysApplication.getInstance().exit();可直接关闭所有的Acitivity并退出应用程序。
附代码:
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.DialogInterface;
import android.content.Intent;
public class SysApplication extends Application{
private List mList= new LinkedList();
private static SysApplication instance;
private SysApplication(){
}
public synchronized static SysApplication getInstance(){
if(null== instance){
instance= new SysApplication();
}
return instance;
}
// add Activity
public void addActivity(Activity activity){
mList.add(activity);
}
public void exit(){
try{
for(Activity activity: mList){
if(activity!= null)
activity.finish();
}
} catch(Exception e){
e.printStackTrace();
} finally{
System.exit(0);
}
}
public void onLowMemory(){
super.onLowMemory();
System.gc();
}
}
3.在应用程序里面的activity的oncreate里面添加SysApplication.getInstance().addActivity(this)
如:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SysApplication.getInstance().addActivity(this);
}
三、Android 怎么退出整个应用程式
Android怎么退出整个应用程式
在Android中,Activity有个栈,一个Activity结束掉,会回到上一个Activity,并不是退出应用程式。
Android中,退出应用程式的方式:
通过pid
int pid= android.os.Process.myPid();获取当前应用程式的PID
android.os.Process.killProcess(pid);杀死当前程序
这种方法退出应用,是会保留某些后进程,例如:Service,Notifications等。
2.通过ActivityManager
ActivityManager manager=(ActivityManager)context.getSystemService(ACTIVITY_SERVICE);获取应用程式管理器
manager.killBackgroundProcesses(getPackageName());强制结束当前应用程式
这种方式退出应用,会结束本应用程式的一切活动,因为本方法会根据应用程式的包名杀死所有程序包括Activity,Service,Notifications等。
呼叫System.exit(0);
其实还有一种方法也不错,把MainActivity设定为singleTop,先跳转到MainActivity然后finish就行,不过要注意停掉相应的Service
大家都知道 Android的 Activity是存著历史栈的,比如从 A-> B-> C,C完成 finish后回到 B,把所有的Activity都 finish了,程式就自然退出了。当然在 finish的同时也需要是否自己程式的其他资源。所以需要想个办法把 Activity给存起来。然后在程式退出的地方呼叫它们的 finish()方法。
使用全域性变数。对了,第一个想到的就是继承 Application,程式码入下。
public class AgentApplication extends Application{ private List<Activity> activities= new ArrayList<Activity>(); public void addActivity(Activity activity){activities.add(activity);}@Overridepublic void onTerminate(){super.onTerminate();for(Activity activity: activities){activity.finish();}onDestroy();System.exit(0);}}
然后在 Activity onCreate的时候来呼叫 addActivity(),有人可能想到这个Application需要在所有的 Activity onCreate的时候都使用,需要做一个单例例项。其实根本不需要。在 Activity中使用 this.getApplication()就可以了。
最后在你需要推出程式的地方呼叫 application.onTerminate()就可以了。记住:super.onTerminate()必须呼叫,程式码中的 onDestroy()是我自己的释放其他资源的方法,不是系统的。
执行以上程式码后,在LogCat中会出现一行提示:
Process包名(pid xxxxx) has died.证明你的程式退出了。现在你可以测试了。
有几种方法,一种是:程式退出时,下方有写在按一次退出程式
第二种,进设定-应用程式-正在执行这一栏自己关
有时跳转的activity较多时,还需要多次按返回键,这样感觉一点都不爽。后面添加了一个选单返回功能键,这个方法也只能用system.exit(0)来关闭当前活动的Activity,附程式码: public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu); MenuItem item= menu.add(Menu.NONE, Menu.NONE, Menu.NONE,"Exit"); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0); return true;}});return true;}想到这样太不方便了,每次退出介面之后应用程式还在执行,今天查了下资料终于把这个问题给解决了,网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplication.getInstance().addActivity(this);添加当前Acitivity到ancivitylist里面去,最后在想退出的时候呼叫SysApplication.getInstance().exit();可直接关闭所有的Acitivity并退出应用程式。附程式码:import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.DialogInterface; import android.content.Intent; public class SysApplication extends Application{ private List mList= new LinkedList(); private static SysApplication instance; private SysApplication(){} public synchronized static SysApplication getInstance(){ if(null== instance){ instance= new SysApplication();} return instance;} add Activity public void addActivity(Activity activity){ mList.add(activity);} public void exit(){ try{ for(Activity activity: mList){ if(activity!= null) activity.finish();}} catch(Exception e){ e.printStackTrace();} finally{ System.exit(0);}} public void onLowMemory(){ super.onLowMemory(); System.gc();}}在应用程式里面的activity的oncreate里面新增SysApplication.getInstance().addActivity(this)如:public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
你可以长按主屏键后,在其中关闭应用程式。但并不能完全退出执行记忆体