0

アプリケーションのヘッダーに戻る矢印の付いたImageButtonがあります。ユーザーがそれを押すと、現在のアクティビティでfinish()を呼び出します。ユーザーが帰宅するオプションもありますが、どういうわけかアクティビティ履歴をクリアしたいので、ユーザーがホームアクティビティの戻るボタンを押すと、アプリケーションが閉じます。

ホームアクティビティを呼び出すときに、インテントにパラメータを設定することもできますが、アプリケーションを閉じるために何を呼び出すのですか?

4

6 に答える 6

1

インテントフラグFLAG_ACTIVITY_CLEAR_TOPは目的に適しています。

履歴なしでアクティビティを開始する例:

Intent intent = new Intent(this,ExampleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2012-11-22T11:03:41.187 に答える
1

アクティビティに移動するときは、そのactivityContextをどこかに保存します(たとえば、コンテキストの配列内)。

終了ボタンを押すと、配列をループして次のように言うことができますactivity.finish()

これで、スタック内のすべてのアクティビティが終了し、ユーザーはアプリを使用できなくなります。

コードは次のようになります。

public class ActivityStack {

    public ArrayList<Context> contextArray=new ArrayList<>(); 

    public void setContext(int i,Context context) {
          contextArray.add(context);
    }

    public void quitApp() {
           for(context:ContextArray) {
              context.finish();  

            }
    }

}

編集:API 16から、finishAffinity()メソッドを使用してすべてのアクティビティを終了できます。

于 2012-11-22T10:53:09.360 に答える
1

startIntentForResult()を使用してアクティビティを呼び出す必要があります。次に、2番目のアクティビティで、次のようなことを行います。

setResult(RESULT_OK);
finish();

そして、最初のアクティビティで、このコードを取得し、そのアクティビティも閉じます。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (resultCode == RESULT_OK) {
  if (getParent() == null) {
  setResult(Activity.RESULT_OK, null);
  }
  else {
   getParent().setResult(Activity.RESULT_OK, null);
  }
  finish();
 }
}
于 2012-11-22T10:54:37.467 に答える
0

この関数を使用できます:

//to remove application from task manager
public void onQuitPressed() {

    int pid = android.os.Process.myPid();
    android.os.Process.killProcess(pid);
}
于 2012-11-22T10:51:17.437 に答える
0

最後のアクティビティを閉じるときは、アプリが閉じていると見なしてください。アプリのライフサイクルは、開発者としての責任を超えており、フレームワークによって処理されます。すべてのアクティビティが終了すると、アクティビティスタック(履歴)は空になるため、次のアプリの起動により、最初にonCreateを呼び出す最初のアクティビティが開始されます。

シングルトンやその他の静的フィールドは保持されますが、より多くのメモリが必要になるため、Androidはそれらをクリアするため、問題はありません。

詳細については、このスレッドを参照することもお勧めします。

于 2012-11-22T10:55:42.233 に答える
0

このようなことをしてください。

サービスを手動で閉じる

@Override
public void onBackPressed() {
    Intent intent = new Intent(NewFox_Project.this,RadioService.class);
    moveTaskToBack(true);
    stopService(intent);


    Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
    moveTaskToBack(true);
    stopService(radioTimes);

    Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
    moveTaskToBack(true);
    stopService(radioPlyerService);

    NewFox_Project.this.finish();
    super.onBackPressed();
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(event.getKeyCode()==KeyEvent.KEYCODE_BACK)
    {
        Intent intent = new Intent(NewFox_Project.this,RadioService.class);
        moveTaskToBack(true);
        stopService(intent);


        Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
        moveTaskToBack(true);
        stopService(radioTimes);

        Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
        moveTaskToBack(true);
        stopService(radioPlyerService);

        NewFox_Project.this.finish();
    }
    return super.onKeyDown(keyCode, event);
}
于 2012-11-22T11:48:57.883 に答える