我有一个在后台有一堆活动的课程(非活动)。有时,我想关闭该堆栈中的旧活动,但大多数时候活动都是在后台进行的,如果我使用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);
}
}
}
答案 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