Android 用于完成后台活动的标志不起作用
在文章末尾用一(一半)个解决方案编辑 在我的Android 用于完成后台活动的标志不起作用,android,android-intent,android-activity,Android,Android Intent,Android Activity,在文章末尾用一(一半)个解决方案编辑 在我的MainActivity.class中有下一个逻辑: if(SaveSharePreferences.getUserEmail().length == 0) { Intent intent = new Intent(MainActivity.this, LoginActivity.class); startActivity(intent); finish(); //Closing MainActivity } else {
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
}
...
处理活动
的主要问题是我的主菜单。类
包含一个带有三个选项卡的查看页面
,并且位于不同的选项卡(片段
)中,我选择转到一个或另一个更深的活动
在其中一个片段中,我有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
,但是下次我登录时,main菜单.class
会打开两次、三次、四次,具体取决于我当前登录的时间
我尝试了intent.addCategory(intent.CATEGORY\u HOME)
,并声明:
public class MainMenu extends AppCompatActivity {
...
static Activity mainMenuActivity;
...
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mainMenuActivity = this;
...
}
...
}
然后把它和其他的关上,但什么都不起作用。有解决办法吗
临时解决方案
标志
不能正常工作,要么声明一个公共静态活动
,然后手动关闭它,因此我用以下方式编辑了AndroidManifest.xml:
<activity
android:name=".NameOfTheActivity"
android:launchMode="singleTask">
这个launchMode=“sigleTask”
是做什么的
系统在新任务和路由的根目录下创建活动
它的意图是什么。但是,如果活动的实例已经存在
存在时,系统通过
调用其onNewIntent()方法,而不是创建新方法
我正在避免我以前遇到的多重开放问题。但是有些活动仍然处于打开状态,我无法关闭它,因此这不是一个确定的解决方案。如果您不希望主菜单处于堆栈中,请在每次转到其他活动时完成它,如果您愿意,请在该活动的背面再次打开它。例如:从主菜单转到配置文件在主菜单中执行以下操作
Intent intent = new Intent(MainMenu.this, ProfileActivity.class);
startActivity(intent);
finish();
要返回主菜单,请在ProfileActivity中执行以下操作
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(ProfileActivity.this, MainMenu.class);
startActivity(intent);
finish();
}
如果您不希望主菜单处于堆栈中,请在每次转到其他活动时完成主菜单,并在该活动的后退中再次打开它(如果您愿意)。例如:从主菜单转到配置文件在主菜单中执行以下操作
Intent intent = new Intent(MainMenu.this, ProfileActivity.class);
startActivity(intent);
finish();
要返回主菜单,请在ProfileActivity中执行以下操作
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent(ProfileActivity.this, MainMenu.class);
startActivity(intent);
finish();
}
执行此操作时:
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
留在任务堆栈中
注意:另外,您不需要意图。标记活动\u新任务
,这在这种情况下是无用的。执行此操作时:
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
留在任务堆栈中
注意:另外,您不需要意图。标记活动\u新任务
,这在这种情况下是没有用的。我忘了提到我已经将主菜单.class
划分为三个不同的片段
,所以我不确定是否可以使用您的解决方案。好的,您已经给了我解决方案(我想是这样)。我会尝试,然后我会发布结果。好的。试试。快乐编码:)有什么问题吗?似乎有一个(或多个)活动保持打开状态,所以每次你登录时,这两个、三个、四个活动(取决于你注销/登录的次数)都是相同的,所以你同时登录三次。问题是标志没有正确关闭。我忘了提到我已经将主菜单.class
划分为三个不同的片段,所以我不确定是否可以使用您的解决方案。好的,您已经给了我解决方案(我想是的)。我会尝试,然后我会发布结果。好的。试试。快乐编码:)有什么问题吗?似乎有一个(或多个)活动保持打开状态,所以每次你登录时,这两个、三个、四个活动(取决于你注销/登录的次数)都是相同的,所以你同时登录三次。问题是标志没有正确地关闭它。