几天前我遇到了这个问题,我很高兴地告诉你我已经找到了解决这个问题的方法。
首先,在要停止的活动中添加AndroidManifest.xml
:
android:launchMode="singleTop"
我将使用 CheckBox 示例。当它被选中时,活动开始,当未选中时,将终止活动。
示例 Activity A 正在调用 Activity 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();
}
}
解释:这基本上做的是,当复选框被选中时,它调用活动并传递一个布尔值,如果它是真的,活动保持活动状态并被带到前台。现在,如果您不传递标志,singleTop
那么将创建此活动的许多实例。singleTop
确保只调用相同的实例。现在,当未选中该复选框时,将传递一个新的 keep 值,该值在 B 中进行验证。如果未选中,则 Activity A 将传递 false,因此 B 从onNewIntent()
函数内终止自身。
PS - 您也可以从另一个 Activity 关闭 Activity 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);