我的应用会在用户登录后弹出一个启动画面告诉用户,这是通过Activity
实现的。
应用程序与后端服务器通信需要一些时间,用户可能会在登录时按“主页”按钮暂时离开应用程序。
如果用户返回主屏幕,我不希望我的启动画面中断用户。因此,我使用FLAG_ACTIVITY_MULTIPLE_TASK
标志启动启动画面活动,因此在启动时不会将其置于前面。
代码工作正常,直到4.4 KitKat。在Android 4.4上,即使我在启动Intent
的{{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