在帖子结束时使用一个(半)解决方案进行编辑
我的 MainActivity.class
:
if(SaveSharePreferences.getUserEmail().length == 0) {
Intent intent = new Intent(MainActivity.this, LoginActivity.class);
startActivity(intent);
finish(); //Closing MainActivity
} else {
Intent intent2 = new Intent(MainActivity.this, MainMenu.class);
startActivity(intent2);
finish(); //Closing MainActivity
}
所以在 LoginActivity.class
:
...
public void login() {
Intent intent = new Intent(LoginActivity.this, MainMenu.class);
startActivity(intent);
finish(); //Closing LoginActivity
}
...
处理Activities
的主要问题是我的MainMenu.class
包含一个带有三个标签的ViewPager
,并且位于我选择的不同标签(Fragments
)中到一个更深的Activity
或另一个。
在其中一个片段中,我有 ProfileActivity.class
选项,我在此处注销。代码是:
public void logOut() {
Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
SaveSharedPreference.clearUser(ProfileActivity.this);
startActivity(intent);
finish();
}
所以应该是我的活动堆栈是空的,或者它只是在注销后包含MainActivity.class
,但是当我下次登录时,MainMenu.class
被打开两个,三个,四次,具体取决于我登录的当前时间。
我曾尝试使用intent.addCategory(Intent.CATEGORY_HOME)
,同时声明:
public class MainMenu extends AppCompatActivity {
...
static Activity mainMenuActivity;
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mainMenuActivity = this;
...
}
...
}
然后从其他人那里关闭它,但没有任何作用。任何解决方案?
时间解决方案
Flags
无法正常声明public static Activity
然后手动关闭它,因此我已按以下方式编辑 AndroidManifest.xml :
<activity
android:name=".NameOfTheActivity"
android:launchMode="singleTask">
这launchMode="sigleTask"
做了什么?
系统在新任务和路由的根目录下创建活动 意图。但是,如果活动的实例已经存在 存在,系统通过a将意图路由到现有实例 调用它的onNewIntent()方法,而不是创建一个新方法。
我避免了之前遇到过的多重问题。但是有些活动仍然开放,我无法关闭它,所以这不是一个明确的解决方案。
答案 0 :(得分:0)
如果你不希望MainMenu进入堆叠状态,每次进入其他活动时都要完成它,如果你愿意,可以再次打开该活动的onBackPress。例如:从Mainmenu转到profile,如下所示在MainMenu
Intent intent = new Intent(MainMenu.this, ProfileActivity.class);
startActivity(intent);
finish();
要返回mainmenu,请在ProfileActivity中执行以下操作
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(ProfileActivity.this, MainMenu.class);
startActivity(intent);
finish();
}
答案 1 :(得分:0)
执行此操作时:
public void logOut() {
Intent intent = new Intent(ProfileActivity.this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
SaveSharedPreference.clearUser(ProfileActivity.this);
startActivity(intent);
finish();
}
您要求Android将任务清除回MainActivity
的现有实例。问题是您没有MainActivity
的现有实例,因为您已经完成了它!
为了实现这一点,您需要始终将MainActivity
留在任务堆栈中。
注意:此外,您不需要Intent.FLAG_ACTIVITY_NEW_TASK
,这在这种情况下无用。