从另一个杀死一个活动(Killing one activity from another)

2019-07-18 06:49发布

我有两个活动A和B B是透明穿过活性,和A能够被看见。 我想通过按下一个按钮A.杀乙

以下是我试过到目前为止:

B obj=new B();
obj.finish();

我创建B的一个对象,并试图杀死它。 没有工作。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", true);
                startActivity(intent);

这段代码是应该做的是明确的最上面的活动,这是B和再次调用B,但这次我传递一个值在B几秒钟后会杀死自己。

这只会越积越多出于某种原因,活动的多个实例。 或者至少,我认为这是由于许多透明的活动所发生的事情,因为屏幕变得像素化。

这里是我的清单:

<activity
        android:name="com.xxx.xxx.B"
        android:excludeFromRecents="true"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:clearTaskOnLaunch="true" >
    </activity>

我有什么做的,这样,当我打一个按钮一次显示活动和第二次杀死它? 创建部分显然是照顾。 我的活动B弹出,我想现在杀它B是在上面。

编辑

我想这有一个复选框,下面的代码:

enable.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            finishActivity(0);
            Intent intent = new Intent(A.this, B.class);
            if (enable.isChecked()) {
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", true);
                intent.putExtra("value", 10);
                startActivityForResult(intent, 0);
            }
            else
            {
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                intent.putExtra("keep", false);
                startActivityForResult(intent, 0);
            }
        }
    });

当启用被检查活动被调用时,工作正常。 但他们继续打桩。 它不喜欢这样A-> B-> A-> B当我检查,并取消选中该复选框。 这是A-> B-> BB-> BBB

Answer 1:

你可以尝试通过调用该活动的静态方法直接杀死的活动:

活性A应具有可变的

 static ActivityA activityA;

在国家的onCreate:

 activityA = this;

并添加这个方法:

public static ActivityA getInstance(){
   return   activityA;
 }

在活动B,调用函数的getInstance()

ActivityA.getInstance().finish();     


Answer 2:

你可以通过调用停止其他活动Activity.finish() 。 另外,您也可以使用Activity.finishActivity()来完成()通过startActivityForResult开始活动。



Answer 3:

我发现了一个很好的方式,从另一个完成一项活动,它是类似于LUMIS一样。 所以,如果你想从ActivityB关闭ActivityA你可以这样做:

在ActivityA做:

className = this.getClass().getName();

并把它传给AvtivityB。 然后在ActivityB做:

((Activity) Class.forName(className).newInstance()).finish();

你可以把一个字符串类成的className自己的名字,但它需要与包全名了。



Answer 4:

创建静态类变​​量来保存实例:静态SampleActivity sampleActivity;

在创建第一个活动的实例保存,就像这样:incidenteActivity =这一点;

创建一个静态方法来获得实例:

public static SampleActivity getInstance(){
    return   sampleActivity;
}

无论你想拨打:

SampleActivity.getInstance().finish();

它确实有效,问候,



文章来源: Killing one activity from another