私は数日前にこの問題を抱えていましたが、これを回避する方法を見つけたことを嬉しく思います。
まず、停止したいアクティビティにこれを追加しますAndroidManifest.xml
:
android:launchMode="singleTop"
CheckBox の例を使用します。チェックするとアクティビティが開始され、チェックを外すとアクティビティが強制終了されます。
例 アクティビティ A はアクティビティ B を呼び出し、インテントを使用してそれを強制終了しています。
A に入れるコード:
checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent intent = new Intent(A.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (enable.isChecked()) {
intent.putExtra("keep", true);
startActivity(intent);
}
else
{
intent.putExtra("keep", false);
startActivity(intent);
}
}
});
B に入れるコード:
boolean keep;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.B);
intent = this.getIntent();
boolean keep = intent.getExtras().getBoolean("keep");
if(keep==true)
{
//execute your code here
}
}
@Override
protected void onNewIntent(Intent intent)
{
super.onNewIntent(intent);
keep = intent.getExtras().getBoolean("keep");
if(keep==false)
{
B.this.finish();
}
}
説明 : これが基本的に行うことは、チェックボックスがチェックされている場合、アクティビティを呼び出してブール値を渡します。true の場合、アクティビティは維持され、フォアグラウンドに移動します。フラグを渡さないsingleTop
と、このアクティビティの多くのインスタンスが作成されます。singleTop
同じインスタンスのみが呼び出されるようにします。ここで、チェックボックスのチェックを外すと、Keep の新しい値が渡され、B で検証されます。チェックを外すと、アクティビティ A は false を渡し、したがって B はonNewIntent()
関数内から終了します。
PS - 別のアクティビティからアクティビティ B を閉じることもできます。If other activity is C: を使用するだけです。
Intent intent = new Intent(C.this, B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("keep", false);
startActivity(intent);