关闭另一个活动

时间:2013-01-19 07:50:49

标签: android android-intent android-activity

我想知道是否有像stopActivity()函数这样的stopService()函数。

我的研究表明,没有这样的功能。但是,我仍然需要能够关闭另一个Activity。

我该如何做到这一点?

2 个答案:

答案 0 :(得分:0)

我几天前遇到过这个问题,我很高兴地告诉你,我已经找到了解决这个问题的方法。

首先,对于您要停止的活动,请在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();
            }
}
}

说明:这基本上是这样做的,当选中复选框时,它调用活动并传递一个布尔值,如果它是真的,则活动保持活动并被带到前台。现在,如果您没有传递标记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);

答案 1 :(得分:0)

你可以使用另一个答案来杀死一个活动,但它不是直截了当的原因是他们真的希望你遵循活动生命周期。

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

在你的onPause()实现中,你应该停止任何与Activity相关的长时间运行处理,除非有充分的理由让它继续运行。

除非它需要内存,否则Android会保留Activity,因为重用已经实例化的Activity远比实例化新的Activity要快得多。最好让Android为您管理内存,而不是自己杀死活动。