我如何关闭整个应用程序?

时间:2013-08-21 13:07:51

标签: android

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

请任何人都可以帮助我。

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

8 个答案:

答案 0 :(得分:6)

据我所知,Android不赞成通过选择退出应用程序.Android OS本身管理它。

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

  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. 将以下代码放入每个活动的清单中,以便 应用程序未显示在最近的应用程序列表中(长时间按下 主页按钮)

        <activity
        android:name=".your_Activity"
        android:label="@string/app_name"
        android:excludeFromRecents="true"/>
    
  3. 因此,每当用户尝试使用exitAppMethod()退出时,用户将被带到主屏幕,同时应用程序将不会显示在最近的应用列表中。因此,用户必须从一开始就启动应用程序。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果您想在每次开始新活动时关闭整个应用而不跟上流量或查杀活动,可以使用this解决方案:

@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代码放在您想要完全关闭活动的每个后退按钮中。

答案 3 :(得分:1)

假设您有活动堆栈,例如A&gt; B&gt; C&gt; D&gt; 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();
            }
        }
    }

答案 4 :(得分:1)

  

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

答案 5 :(得分:0)

您可以通过多种策略实现此功能: 假设一个例子:

在app中开始新的活动的每个地方,即:

startactivity(intent);

在进入下一个活动之前完成当前活动:

 startactivity(intent);
 this.finish();

以这种方式在应用中的任何位置,当您点击后退整个应用时,将会关闭:

否则如果您对片段有任何了解,也可以使用FragmentActivity,这也是一种很好的方法。

答案 6 :(得分:0)

您可以关闭所有用户界面(活动),但无法真正关闭您的流程。 System.exit(0);可能有用,但当其他进程需要您的资源时,该进程可以重新生效。 “关闭申请”不是一个好主意。您只能处理“ui closing”事件。尝试定义所有活动的“计数”,在onDestory中“dec”它们。

    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.
 }
}

答案 7 :(得分:0)

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