我有活动A,活动B,活动C.我从A到B,b显示登录页面。用户登录我关闭活动b和活动a ..并转到活动c。我怎么做到这一点?我使用全局变量并将活动A保留在内存中,因此当用户登录时...我会调用以下内容:
结束(); 全球变异活动a.finish()
现在问题在哪里?假设我的应用程序在低内存上运行,我转到后台并返回到我的应用程序。突然全局变量丢失,那解决方案是什么?
答案 0 :(得分:1)
我的建议是,您为结果StartActivityForResult启动活动B,当您决定转到C时,设置活动B结果并完成它,当您这样做时,活动A的OnActivityResult方法获得用您设置的结果调用,这样就可以完成A。
示例代码:
活动A
private static final int ACTIVITY_B_CODE = 200;
private void startB(){
Intent intent = new Intent(ActivityA.this, ActivityB.clasS);
startActivityForResult(intent, ACTIVITY_B_CODE);
}
@Override
protected void onActivityResult (int requestCode, int resultCode, Intent data){
if (requestCode == ACTIVITY_B_CODE){
if (resultCode == RESULT_OK){
finish();
}
}
}
活动B:
private void startC(){
Intent intent = new Intent(ActivityB.this, ActivityC.class);
startActivity(intent);
setResult(RESULT_OK);
finish();
}
答案 1 :(得分:0)
更好的方法是在登录后清除之前的活动堆栈并转到C.
这样,C就是活动堆栈的新顶部,活动A和B被移除。
Intent intent = new Intent(getApplicationContext(), ActivityC.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
修改强>
我个人在我自己的应用程序中遵循的另一种方法(可能听起来有点复杂,但有效):
使用特定的RequestCode从A启动B.
Intent intent = new Intent(ActivityA.this, ActivityB.class);
startActivityForResult(intent, LOGIN_INTENT);
在活动B中登录用户。成功登录后,在B中设置ResultCode并完成()B。
onSuccessfulLoginCallback() {
Intent resIntent = new Intent();
setResult(LOGIN_OK, resIntent);
finish();
}
控件现在返回到活动A.现在,在A的onActivityResult()中,检查RequestCode和ResponseCode。如果匹配,则启动活动C并完成A.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == LOGIN_INTENT) {
if(resultCode == LOGIN_OK){
Intent homeIntent = new Intent(ActivityA.this, ActivityC.class);
startActivity(homeIntent);
finish();
}