Android:根据用户偏好不同的启动活动

时间:2010-08-27 22:18:27

标签: android android-activity android-intent splash-screen

我的应用程序以欢迎屏幕活动开始,但该屏幕可以选择在将来的发布中完全跳过该屏幕。

Android的正确方法是什么?最初,我只是自动检测到skipWelcome首选项并切换到Welcome的第二个活动。但这样做的结果是允许用户点击后退按钮进入我们承诺永远不再显示的欢迎屏幕。

现在,在欢迎活动中,我阅读了首选项并在当前活动上调用了finish():

    SharedPreferences preferences = getPreferences(MODE_PRIVATE);
    boolean skipWelcome = preferences.getBoolean("skipWelcome", false);

    if (skipWelcome) {
        this.finish();
    } 

然后我实现onDestroy继续下一个Activity:

@Override
public void onDestroy() {
    super.onDestroy();
    startActivity(new Intent(Welcome.this, StartFoo.class));
}

但这会产生一些奇怪的视觉转换。我开始认为我需要一个基本活动弹出打开欢迎,只有在适当的情况下,然后转到StartFoo。

2 个答案:

答案 0 :(得分:5)

我不能评论Mayra的回答,或者我会(没有足够的代表),但这是正确的方法。

隐藏在Android文档中的是Activity.startActivityForResult()

这个重要的短语
  

“作为一个特例,如果你打电话   startActivityForResult()用   requestCode> =初始期间的= 0   的onCreate(捆绑   savedInstanceState)/ onResume()你的   活动,然后你的窗口将不会   显示,直到返回结果   从已开始的活动回来。这个   是为了避免可见的闪烁   重定向到另一个活动。“

另一个重要的注意事项是此调用不会阻塞并继续执行,因此您需要通过返回

来停止执行onCreate
if (skipWelcome) {
    // Create intent
    // Launch intent with startActivityForResult()
    return;
} 

Mayra说,最后一部分是在欢迎活动的onActivityResult中立即致电完成。

答案 1 :(得分:2)

有一些解决方案。

您是否尝试过启动活动并完成?我愚蠢地记得工作,但我可能是错的。

更准确地说,在if(skipWelcome)中,您可以为结果启动新活动,然后在调用onActivityResult时,立即完成欢迎活动。

或者,您可以让您的启动器活动没有视图(不设置内容),并启动欢迎活动或StartFoo。