2013-01-19 123 views
-1

我想知道是否有stopActivity()函数,如stopService()函数。关闭另一个活动

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

我该如何做到这一点?

回答

0

前几天我有这个问题,我很高兴地告诉你,我找到了解决办法。

首先,对活动要停止在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(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); 
0

您可以使用对方的回答杀死一个活动,但它不是直接的原因是,他们真的想你了跟随活动的生命周期。

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

在你的onPause()的实现,你应该停顿与活动有关的任何长期运行的处理,除非有充分的理由继续下去。

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