Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用于完成后台活动的标志不起作用_Android_Android Intent_Android Activity - Fatal编程技术网

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
划分为三个不同的
片段,所以我不确定是否可以使用您的解决方案。好的,您已经给了我解决方案(我想是的)。我会尝试,然后我会发布结果。好的。试试。快乐编码:)有什么问题吗?似乎有一个(或多个)活动保持打开状态,所以每次你登录时,这两个、三个、四个活动(取决于你注销/登录的次数)都是相同的,所以你同时登录三次。问题是标志没有正确地关闭它。