前幾天我有這個問題,我很高興地告訴你,我找到了解決辦法。
首先,對活動要停止在AndroidManifest.xml
補充一點:
android:launchMode="singleTop"
我要使用一個CheckBox實例。當它被檢查時,活動已開始,未選中時將終止該活動。
示例活動A正在調用活動B,然後使用意向對其進行殺死。被放在一個
代碼:
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();
}
}
說明:這是什麼基本上做的是,當複選框被選中它調用的活動,傳遞一個布爾值,如果它是真的活動保持活躍並被帶到前臺。現在,如果您未通過國旗singleTop
,則會創建此活動的許多實例。 singleTop
確保只調用同一個實例。現在,當取消選中複選框時,將傳遞一個新的keep值,並在B中進行驗證。如果未選中,則活動A將傳遞false,因此B將從onNewIntent()
函數中自行終止。
P.S - 您也可以從其他活動中關閉活動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);
似乎這將是一個安全侵犯,如果一個應用程序可能會殺死另一個。 – EJK
除非目標應用程序通過意圖發佈此功能。 – EJK