关闭另一个活动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关闭另一个活动相关的知识,希望对你有一定的参考价值。
我想知道是否有像stopActivity()
函数的stopService()
函数。
我的研究表明没有这样的功能。但是,我仍然需要能够从另一个活动中关闭一个活动。
我怎么能做到这一点?
你可以使用另一个答案杀死一个Activity,但是它不直接的原因是他们真的希望你遵循活动生命周期。
http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle
在你的onPause()实现中,你应该停止任何与Activity相关的长时间运行处理,除非有充分的理由让它继续运行。
除非需要内存,否则android会保留Activity,因为重用已经实例化的Activity比实例化新的Activity要快得多。允许Android为您管理内存比自己杀死活动更好。
几天前我遇到了这个问题,我很高兴地告诉你,我已经找到了解决这个问题的方法。
首先,对于要停止的活动,请在AndroidManifest.xml
中添加:
android:launchMode="singleTop"
我将使用CheckBox示例。检查时,活动开始,未选中时将终止活动。
示例活动A正在调用活动B,然后使用intent将其杀死。
代码放入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();
}
}
}
说明:这基本上是这样做的,当选中复选框时,它调用活动并传递一个布尔值,如果它是真的,则活动保持活动并被带到前台。现在,如果你没有传递标志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);
以上是关于关闭另一个活动的主要内容,如果未能解决你的问题,请参考以下文章