Android 怎么退出整个应用程式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 怎么退出整个应用程式相关的知识,希望对你有一定的参考价值。

参考技术A

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应用: 

第一种方法:首先获取当前进程的id,然后杀死该进程。 (建议使用) 
android.os.Process.killProcess(android.os.Process.myPid()) 

第二种方法:终止当前正在运行的Java虚拟机,导致程序终止 
System.exit(0); 

第三种方法:强制关闭与该包有关联的一切执行 
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
manager.restartPackage(getPackageName());

<uses-permission android:name="android.permission.RESTART_PACKAGES" />

 

用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dialog中的按钮。个人觉得“再按一次返回键退出程序”是best practice,实现也很简单,直接上代码:

private long exitTime = 0;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN)   
        if((System.currentTimeMillis()-exitTime) > 2000)  
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                                
            exitTime = System.currentTimeMillis();   
         else 
            finish();
            System.exit(0);
        
        return true;   
    
    return super.onKeyDown(keyCode, event);

Android 怎么退出整个应用程序?

我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这两种操作都没有关闭当前应用程序没有释放系统资源。有时跳转的activity较多时,还需要多次按返回键,这样感觉一点都不爽。


网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面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<Activity> mList = new LinkedList<Activity>(); 
    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);
setContentView(R.layout.main);
SysApplication.getInstance().addActivity(this); 

以上是关于Android 怎么退出整个应用程式的主要内容,如果未能解决你的问题,请参考以下文章

Android 怎么退出整个应用程序

android怎样点击两下退出程序

Android-ActivityManager 退出整个应用

Android App 退出整个应用

Android中再按一次退出和完美退出整个应用程序

Flutter:退出应用