发送标志以完成来自任何其他类的活动

时间:2016-03-07 11:40:37

标签: android android-activity broadcastreceiver bundle

我有一个在后台有一堆活动的课程(非活动)。有时,我想关闭该堆栈中的旧活动,但大多数时候活动都是在后台进行的,如果我使用language: java jdk: - openjdk6 - openjdk7 - oraclejdk7 - oraclejdk8 script: "mvn install" ,它就无法工作。

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

我试图这样做但没有成功:

在我的NoActivity.class上:

onResume()

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

任何帮助将不胜感激。

我也尝试使用@Override protected void onResume() { super.onResume(); Bundle bundle = getIntent().getExtras(); if(bundle != null && bundle.getBoolean(getString(R.string.bundle_cerrar_activity), false)){ this.finish(); } } 来关闭这些活动,但它仍然无效。我尝试了下一个方法:

在我的NoActivity.class

BroadcastReceiver

在CloseActivitiesBroadcastReceiver.java上:

    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);
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

尝试在活动中使用广播接收器完成, 1)注册活动以收听结束活动。 2)发送活动将收到的广播,并自行完成。

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

感谢

答案 1 :(得分:0)

好的,这是一个不太肮脏的答案,但却是唯一一个可以开展工作的人。如果有人得到更好的答案,请发布。

在我的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);
        }
    }
}

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

在MyActivity.class上:

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

就我而言,NoActivity.class作为Singleton