21

ボタンクリックでアプリケーション全体を閉じたいアプリケーションを開発しています。私はアンドロイドでアプリケーションを閉じることを考えるべきではないことを知っています。なぜならアンドロイドはこれから自動的にそれを行うからです。。しかし、それでもアプリケーションを閉じたいと思います。

したがって、アプリケーションを閉じるために行っているのは、Intent.FLAG_ACTIVITY_CLEAR_TOPフラグを使用してアクティビティスタックを削除することです。

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

そして、onCreate ofでFinishActivity.class呼び出しthis.finish()ていますが、アプリケーションが閉じられず、前のアクティビティが再開されます。

FinishActivity.class

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    this.finish();
}

アップデート :

これがシナリオです

MainActivity->Activity2->Activity3->FinishActivity

こちらActivity2はアクティビティ終了後に開きます。

どうすればこれを達成できますか?任意のアイデアや提案をいただければ幸いです。

ありがとうございます。それでは、お元気で

4

10 に答える 10

35

これを試してみてください。これにより、アクティビティスタックがクリアされます。

Intent i = new Intent(this,MyActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
于 2013-01-08T06:15:00.050 に答える
27

これは最終的に100%の時間でうまくいきました。すべてのフラグをスタンドアロンで試しましたが、コードのすべてのインスタンスで機能することはありませんでした。この機能が必要なすべての場所、約 5 つの異なる場所ですべてのフラグを使用しましたが、現在は機能しています。

            Intent intent = new Intent(actvSignIn.this, actvNearbyPlaces.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
            startActivity(intent);
            finish();
于 2016-02-11T00:12:31.157 に答える
20

これを使って -

 Intent intent = new Intent(Activity3.this, FinishActivity.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
 Intent.FLAG_ACTIVITY_NEW_TASK);
 intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
 startActivity(intent);
 finish();

編集済み--新しい回答で、完全に機能します..

例を挙げるだけです...プロジェクトのニーズに応じて実行してください--

私は 3 つActivityのクラス A、B、C を受講しています。クラス C アクティビティのビューに閉じるボタンを適用しました。必要に応じて、[戻る] ボタンで前のアクティビティに移動できます。[閉じる] ボタンを押すと、アプリを終了します..見てください--

public class AActivity extends Activity {

  /** Called when the activity is first created. */
  @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent i = new Intent(this, B.class);
    startActivityForResult(i, 1);
}

@Override
protected void onActivityResult(final int requestCode,
        final int resultCode, final Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (resultCode == 5) {
        finish();
    }
}
}

次のクラスのアクティビティを受講してください--

   public class B extends Activity {
    /** Called when the activity is first created. */
   @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.b);

    Intent i = new Intent(this, C.class);
    startActivityForResult(i, 2);
}

@Override
protected void onActivityResult(final int requestCode,
        final int resultCode, final Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

    if (resultCode == 5) {
        setResult(5);
        finish();
    }
}
}

最後のアクティビティを実行--

    public class C extends Activity {
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.c);
}

    // close button..set by xml view..you can set it by button listener.
public void close(View v) {
    setResult(5);
    finish();
}
}

うまくいけば、それはあなたの問題を解決するでしょう..乾杯!

于 2013-01-08T06:10:57.210 に答える
4

のドキュメントからIntent.FLAG_ACTIVITY_CLEAR_TOP

設定されている場合、起動されているアクティビティが現在のタスクで既に実行されている場合、そのアクティビティの新しいインスタンスを起動する代わりに、その上にある他のすべてのアクティビティが閉じられ、このインテントがに配信されます (現在上)新しいインテントとしての古いアクティビティ。

したがって、それを機能させるにFinishActivityは、Activity スタックの最初の 1 つである必要があります。それ以外の場合、このソリューションでは何も得られません。

これを実行するには、いくつかの手順を実行する必要があります。

1)FinishActivityランチャー アクティビティとして作成します。

2) ビューを提供せず、最初にアプリケーションをコールバックActivityから直接開始します。onCreate

3)onRestartコールバックを再定義します。

コードサンプル:

private boolean isNeedToContinue = true;

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
}

@Override
protected void onResume() {
    super.onResume();
    if (isNeedToContinue) {
                    startActivity(new Intent(this,FirstVisibleActivity.class));
                    isNeedToContinue = false;
    } else {
        finish();
    }
}

@Override
protected void onRestart() {
    super.onRestart();
    finish();
    isNeedToContinue = false;
}

必要なのはこれだけだと思います。幸運を!

于 2013-01-08T06:09:53.760 に答える
3

setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

xmlのFinishActivity定義でlaunchModeを"singleTop"に設定し、onNewIntentメソッドを上書きする以外に、onCreateでアクティビティを終了することを示す、インテントの一部として追加情報を渡すことができます。呼び出しからのシグナルに基づいて、onNewIntentメソッドでアクティビティを終了します。アクティビティまたは単にあなたのニーズに基づいてそれを終了します。あなたの他の活動が異なるラウチモードを持っている可能性があります。それが彼らが終わっていない理由です。

于 2013-01-08T06:26:05.593 に答える
0

これを試して:

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
于 2013-01-08T06:11:40.533 に答える
0

このように試してみてくださいこれは私にとってはうまくいきます:

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(android.content.Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

コードの代わりに

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
于 2013-01-08T06:06:42.540 に答える
0

これは私のために働いた:

Intent intent = new Intent(Activity3.this, FinishActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
于 2015-11-17T19:35:40.407 に答える