我有3个活动A,B和C. A导致B导致C.我希望能够在A和B之间来回移动但是我想在C开始后完成A和B 。我理解如何通过意图启动C时关闭B但是如何在C启动时关闭A?
答案 0 :(得分:12)
在onCreate()
方法中,为变量分配静态实例以创建Singleton:
public static ActivityA instance = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
@Override
public void finish() {
super.finish();
instance = null;
}
然后在C:
public void onCreate(Bundle savedInstanceState) {
if(ActivityA.instance != null) {
try {
ActivityA.instance.finish();
} catch (Exception e) {}
}
}
(对B和A重复上述代码)
我会说这不优雅,并且必然会引入奇怪的生命周期错误。
如果您可以调整您的要求会更好 - 如果您不能,您可以使用单个活动并将A,B和C更改为Fragments
?
我会建议广播,但据我所知,你不能在“非恢复”活动上安装实例级广播接收器。
使用Service
绑定到活动似乎有点矫枉过正 - 但如果上述操作不起作用,您可能需要考虑。
答案 1 :(得分:2)
((Activity)context_of_another_activity).finish();
答案 2 :(得分:0)
我意识到这是一个很晚的答复,但是我认为BroadcastReceiver
是解决此问题的最佳方法。
在活动A中添加此
//class object
BroadcastReceiver receiver;
//add this to onCreate()
receiver =new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
}
};
IntentFilter filter =new IntentFilter();
filter.addAction("FINISH_A");
registerReceiver(receiver, filter);
//add this to Activity A as well
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
然后,在活动C中的onCreate()(或您要完成活动A的任何时间)
Intent local =new Intent();
local.setAction("FINISH_A");
sendBroadcast(local);
答案 3 :(得分:-1)
从B开始C时,请这样做:
Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
现在,C开始了,但A和B都没了。
但是,我认为如果您可以重新考虑您的设计,以便C不依赖于A完成与否,我认为会更好。