2

我正在使用此代码退出整个应用程序。实际上我尝试在我的应用程序的任何页面中退出应用程序。我试图这个代码..

请任何人都可以帮助我。

    @Override
    public void onBackPressed() {
     this.finish();
    }
4

8 回答 8

6

据我所知,Android 不赞成选择退出应用程序。Android 操作系统本身管理它。

但是,您可以考虑以下作为解决方法。

  1. 您可以通过其相应的 Intent 调出 Home 应用程序:

    public void exitAppMethod(){
    
           Intent intent = new Intent(Intent.ACTION_MAIN);
           intent.addCategory(Intent.CATEGORY_HOME);
           intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           startActivity(intent);
    }
    
    then you can call this method wherever you want. like
    
    @Override
    public void onBackPressed() {
     exitAppMethod()
    }
    
  2. 将以下代码放入每个活动的清单中,以便应用程序不会显示在最近的应用程序列表中。(长按home键)

        <activity
        android:name=".your_Activity"
        android:label="@string/app_name"
        android:excludeFromRecents="true"/>
    

因此,每当用户尝试退出使用exitAppMethod()时,用户将被带到主屏幕,同时该应用程序不会显示在最近的应用程序列表中。所以用户只需要从一开始就启动应用程序。

于 2013-08-21T14:02:01.857 回答
1

假设您有 A>B>C>D>E 之类的活动堆栈。你在活动 D,你想关闭你的应用程序。这就是你要做的——

在要关闭的活动中(活动 D)-

Intent intent = new Intent(D.this,A.class);
intent.putExtra("exit", "exit");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

在您的 RootActivity(即您的基本活动,此处为活动 A)中 -

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        if (intent.hasExtra("exit")) {
            setIntent(intent);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (getIntent() != null) {
            if (("exit").equalsIgnoreCase(getIntent().getStringExtra(("exit")))) {
                onBackPressed();
            }
        }
    }
于 2014-10-08T13:39:52.850 回答
1

如果您想在每次启动新应用时都关闭整个应用程序而不跟上流程或杀死活动,您可以使用解决方案:

@Override
public void onBackPressed() {
    Intent intent = new Intent(getApplicationContext(), FirstActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("EXIT", true);
    startActivity(intent);
}

然后在您的第一个活动的 onCreate 方法中执行以下操作:

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();
}

当然,您必须将 onBackPressed 代码放在要完全关闭活动的每个后退按钮中。

于 2013-08-21T13:36:27.190 回答
1

您需要维护应用程序的流程。如果在任何时候,您想在按下后退按钮时退出应用程序,那么您需要确保没有任何活动被推入堆栈。

例如,您可以在移动到另一个活动时完成每个活动。这样,您甚至不需要处理设备的后退按钮,用户将退出应用程序。

于 2013-08-21T13:21:08.443 回答
1

如果您需要关闭应用程序使用finish();或从嵌套活动中关闭您的应用程序,您可以使用finishAffinity();

于 2018-06-01T08:20:33.277 回答
0

您可以关闭所有 UI(活动),但您不能真正关闭您的流程。System.exit(0); 可能有效,但是当其他进程需要您提供资源时,该进程可以重新运行。“关闭应用程序”不是一个好主意。您只能处理“ui 关闭”的事件。尝试定义所有活动的“计数”,在 onDestory 中“减少”它们。

    public class BasicActivity extends Activity {
 onCreate() {
     mPreference.incActivityCount();//++
     super.onCreate();
 }

 onDestory() {
     mPreference.decActivityCount();//--
     if( mPreference.getActivity() == 0 ) {
         //All being opened Activities have been closed.
         onAppHasNoUIs();
     }
     super.onDestory();
 }

 onAppHasNoUIs() {
        //All being opened Activities have been closed.
 }
}
于 2013-08-21T13:34:49.307 回答
0

有很多策略可以实现此功能:假设一个示例:

开始新活动时应用程序中的每个位置,即:

startactivity(intent);

在进入下一个活动之前完成当前活动,如下所示:

 startactivity(intent);
 this.finish();

这样,当您单击返回时,应用程序中的任何位置都将关闭整个应用程序:

如果您对片段有任何想法,您也可以使用 FragmentActivity 这也是一个好方法。

于 2013-08-21T13:21:42.280 回答
0

由于您没有提及您的活动流程,因此建议您在开始新活动时终止现有活动 ku finish() 方法。

于 2014-03-15T07:35:47.497 回答