stopActivity()
関数のような関数があるのだろうかstopService()
。
私の研究によると、そのような機能はありません。ただし、あるアクティビティを別のアクティビティから閉じる機能はまだ必要です。
どうすればこれを達成できますか?
stopActivity()
関数のような関数があるのだろうかstopService()
。
私の研究によると、そのような機能はありません。ただし、あるアクティビティを別のアクティビティから閉じる機能はまだ必要です。
どうすればこれを達成できますか?
私は数日前にこの問題を抱えていましたが、これを回避する方法を見つけたことを嬉しく思います。
まず、停止したいアクティビティにこれを追加します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(filterAct);
}
}
});
Bに入れるコード:
boolean keep;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.B);
intent = this.getIntent();
boolean keep = brightnessIntent.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
同じインスタンスのみが呼び出されるようにします。ここで、チェックボックスをオフにすると、Bで検証されるkeepの新しい値が渡されます。オフにすると、アクティビティAはfalseを渡すため、BはonNewIntent()
関数内から終了します。
PS-別のアクティビティからアクティビティBを閉じることもできます。他のアクティビティが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);
他の答えを使用してアクティビティを強制終了できますが、それが簡単ではない理由は、アクティビティのライフサイクルに従うことを本当に望んでいるためです。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
onPause() の実装では、継続する正当な理由がない限り、Activity に関連付けられた実行時間の長い処理を停止する必要があります。
Android は、新しいアクティビティをインスタンス化するよりも、既にインスタンス化されたアクティビティを再利用する方がはるかに高速であるため、メモリが必要でない限り、アクティビティを保持します。アクティビティを自分で強制終了するよりも、Android がメモリを管理できるようにする方が適切です。