android退出应用?Android 应用退出的几种方法
朋友们,你是否曾想过深入了解android退出应用和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等。
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);
你可以长按主屏键后,在其中关闭应用程式。但并不能完全退出执行记忆体
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);
}
}
}
【最后】
推荐使用第三种方案,方便管理退出。
好了,文章到此结束,希望可以帮助到大家。