FLAG_ACTIVITY_MULTIPLE_TASK在Android 4.4 KitKat上不起作用

时间:2013-12-19 08:28:27

标签: android android-activity launch android-4.4-kitkat

我的应用会在用户登录后弹出一个启动画面告诉用户,这是通过Activity实现的。

应用程序与后端服务器通信需要一些时间,用户可能会在登录时按“主页”按钮暂时离开应用程序。

如果用户返回主屏幕,我不希望我的启动画面中断用户。因此,我使用FLAG_ACTIVITY_MULTIPLE_TASK标志启动启动画面活动,因此在启动时不会将其置于前面。

代码工作正常,直到4.4 KitKat。在Android 4.4上,即使我在启动Intent的{​​{1}}上设置了标记,当应用在后台时,启动画面仍会跳到前面。

对此有任何可行的解决方案吗?

1 个答案:

答案 0 :(得分:0)

该问题似乎与FLAG_ACTIVITY_MULTIPLE_TASK无关。

在Android 4.3中,从非活动Activity启动的Activity也处于非活动状态。 但是在Android 4.4中,Activity启动表单无效Activity将被带到前面。

所以我添加了一堆代码来解决这个问题:

我将isPaused属性添加到BaseAcitity,这是我应用中所有活动的基类。

public class BaseActivity extends FragmentActivity {

    public static final String START_FROM_PAUSED_ACTIVITY_FLAG = "START_FROM_PAUSED_ACTIVITY_FLAG";

    protected boolean paused = false;

    @Override
    protected void onPause() {
        super.onPause();
        paused = true;
    }

    @Override
    protected void onResume() {
        super.onResume();
        paused = true;
    }

    public boolean isPaused() {
        return paused;
    }
}

然后当我开始SplashActivity时,我会将isPaused值放入意图中。

Intent intent = new Intent(activity, SplashActivity.class);

boolean isStartingFromBackgroundActivity = activity.isPaused();
intent.putExtra(BaseActivity.START_FROM_PAUSED_ACTIVITY_FLAG, isStartingFromBackgroundActivity);

startActivity(intent);

onCreate的{​​{1}}回调中检查isPaused值,如果值为true,则将SplashAcitivity推送到后台。

SplashAcitivty