2013-12-19 66 views
1

我的应用程序会弹出一个启动画面来告诉用户用户登录后,用Activity实现。FLAG_ACTIVITY_MULTIPLE_TASK在Android 4.4上不起作用KitKat

这需要一些时间应用与后端服务器进行通信,并且用户可以按下“Home”按钮,暂时在登录时离开应用程序。

我不希望我的启动画面打断用户如果用户返回到主屏幕。所以我用FLAG_ACTIVITY_MULTIPLE_TASK标志启动启动画面活动,所以它在启动时不会被带到最前面。

该代码工作正常,直到4.4 KitKat。在Android 4.4上,即使我在启动ActivityIntent上设置标志,启动画面仍然会在应用程序处于后台时跳转到前端。

任何可能的解决方案?

回答

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回调检查SplashAcitivity isPaused得到价值,并推动SplashAcitivty背景,如果该值为true。

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if (isStartedFromBackgroundActivity()) 
     moveTaskToBack(true); 

} 

private boolean isStartedFromBackgroundActivity() { 
    return getIntent().getBooleanExtra(START_FROM_PAUSED_ACTIVITY_FLAG, false); 
} 
相关问题