发送标志以完成来自任何其他 class 的 activity

Send flag to finish an activity from any other class

我有一个 class(不是 Activity),它在后台有一堆活动。有时,我想从那个堆栈中关闭一个旧的 activity,但大多数时候活动都在后台进行,如果我使用 finish(),它就不起作用。

所以,我正在考虑使用 putExtra 将消息发送到 activity,以便它可以在 onResume() 上关闭。

我正在尝试这样做但没有成功:

我的 NoActivity.class:

public void removeActivityFromStack(Activity activity){
    for(int i = mActivityStack.size(); i>0; i--){
        if(mActivityStack.get(i - 1).equals(activity)){
            mActivityStack.remove(i-1);
            activity.getIntent().putExtra(CLOSE_ACTIVITY, true);
        }
    }
}

并在 MyActivity.class:

@Override
protected void onResume() {
    super.onResume();
    Bundle bundle = getIntent().getExtras();
    if(bundle != null && bundle.getBoolean(getString(R.string.bundle_cerrar_activity), false)){
        this.finish();
    }
}

任何帮助将不胜感激。


我也试过用BroadcastReceiver关闭那些活动,但还是不行。我尝试了下一种方式:

在我的 NoActivity.class

    public void removeActivityFromStack(Activity activity){
        for(int i = mActivityStack.size(); i>0; i--){
            if(mActivityStack.get(i - 1).equals(activity)){
                IntentFilter filter = new IntentFilter();
                CloseActivitiesBroadcastReceiver baseActivityReceiver = new CloseActivitiesBroadcastReceiver();
                filter.addAction(CLOSE_ACTIVITY);
                current.registerReceiver(baseActivityReceiver, filter);
                current.sendBroadcast(new Intent(CLOSE_ACTIVITY));
                mActivityStack.remove(i-1);
            }
        }
    }

在 CloseActivitiesBroadcastReceiver.java 上:

public class CloseActivitiesBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(context.getString(R.string.bundle_cerrar_activity))) {
            ((Activity)context).finish();
        }
    }
}

尝试在 activity 中使用广播接收器来完成, 1) 注册 activity 监听结束事件。 2) 发送将由 activity 接收的广播,它将自行完成。

希望这有助于解决您的问题。

谢谢

好的,这是一个有点肮脏的答案,但这是我唯一可以解决的问题。如果有人得到更好的答案,post 它。

我的 NoActivity.class:

public void removeActivityFromStack(Activity activity){
    for(int i = 0; i<mActivityStack.size(); i++){
        if(mActivityStack.get(i).equals(activity)){
            activity.finish()
            mActivityStack.remove(i);
        }
    }
}

这样,如果 activity 在前台,将在 finish() 上关闭。否则,它根本不会关闭。但是对于这种情况:

在 MyActivity.class:

    @Override
    protected void onResume() {
        super.onResume();
        if(!mNoActivityInstance.getActivityStack().contains(this)){
            finish();
        }
    }

在我的例子中,NoActivity.class 作为单例工作