发送标志以完成来自任何其他 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 作为单例工作
我有一个 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 作为单例工作