我找到了一些以编程方式退出Android应用程序的代码。通过在onDestroy()中使用以下任何代码,它会完全退出应用程序吗?

System.runFinalizersOnExit(真正的) (或) android.os.Process.killProcess (android.os.Process.myPid ());

我不想在点击退出按钮后在后台运行我的应用程序。 请告知我是否可以使用这些代码中的任何一个来退出我的应用程序?如果可以,我可以使用哪个代码?在Android中退出应用程序是一个好方法吗?


当前回答

朋友只需添加此函数以编程方式退出应用程序 # java

public void onBackPressed() 
{

    finishAffinity();
    System.exit(0);
}

其他回答

这可能很晚了,而且根据指导方针,您不应该自己处理生命周期过程(因为操作系统为您做了)。一个建议是,你在你所有的活动中注册一个广播接收器,在他们的onReceive()中使用“finish()”&每当你希望退出时,你可以简单地传递一个意图,指示所有活动必须关闭..... 尽管要确保在onDestroy()方法中“取消注册”接收器。

我觉得你要找的是这个

activity.moveTaskToBack(Boolean nonRoot);

如果您确实需要关闭应用程序,请认真考虑一下:为什么不让操作系统自行决定何时何地释放资源呢?

否则,如果你非常确定,就用

finish();

作为对@dave appleton评论的回应:第一件事是阅读大问题/答案组合@gabriel的帖子:退出应用程序是不受欢迎的吗?

现在假设我们有了这个,这里的问题仍然有一个答案,如果你要做任何关于退出的事情,你需要的代码是finish()。显然你可以有不止一项活动等等,但这不是重点。让我们看一些用例

You want to let the user quit everything because of memory usage and "not running in the background? Doubtfull. Let the user stop certain activities in the background, but let the OS kill any unneeded recourses. You want a user to not go to the previous activity of your app? Well, either configure it so it doesn't, or you need an extra option. If most of the time the back=previous-activity works, wouldn't the user just press home if he/she wants to do something else? If you need some sort of reset, you can find out if/how/etc your application was quit, and if your activity gets focus again you can take action on that, showing a fresh screen instead of restarting where you were.

所以最后,当然,finish()不会杀死所有东西,但我认为它仍然是你需要的工具。如果有“杀死所有活动”的用例,我还没有找到。

我们希望代码健壮而简单。 该解决方案适用于旧设备和新设备。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        getActivity().finishAffinity();
    } else{
        getActivity().finish();
        System.exit( 0 );
    }

首先,这种方法要求最小Api 16。

为了更广泛地解决这个问题,我将把这个解决方案分为3个部分。

1. 如果你想在Activity中退出应用程序,请使用以下代码片段:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    finishAndRemoveTask();
}

2. 如果你想退出一个非Activity类的应用程序,可以访问Activity,那么使用下面的代码片段:

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    getActivity().finishAndRemoveTask();
}

3.如果你想在非Activity类中退出应用程序,并且不能访问Activity(如Service),我建议你使用BroadcastReceiver。您可以将此方法添加到项目中的所有活动中。

创建LocalBroadcastManager和BroadcastReceiver实例变量。您可以替换getPackageName()+"。Closeapp”如果你想的话。

LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(getPackageName()+".closeapp")){
            if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
                finishAffinity();
            } else if(Build.VERSION.SDK_INT>=21){
                finishAndRemoveTask();
            }
        }
    }
};

将这些添加到Activity的onCreate()方法。

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);

另外,不要忘记在Activity的onDestroy()方法调用unregister receiver

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

对于退出应用程序,你必须使用LocalBroadcastManager发送广播,我在我的PlayService类中使用,它扩展了服务。

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));