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

Kev*_*vin 5 android splash-screen android-intent android-activity

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

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

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

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

    if (skipWelcome) {
        this.finish();
    } 
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

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

隐藏在Android文档中的是Activity.startActivityForResult()的重要短语,

"作为一种特殊情况,如果在活动的初始onCreate(Bundle savedInstanceState)/ onResume()期间使用requestCode> = 0调用startActivityForResult(),那么在从开始返回结果之前,您的窗口将不会显示这是为了避免在重定向到另一个活动时出现明显的闪烁."

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

if (skipWelcome) {
    // Create intent
    // Launch intent with startActivityForResult()
    return;
} 
Run Code Online (Sandbox Code Playgroud)

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


Che*_*mon 2

对此有一些解决方案。

您是否尝试过仅启动活动并完成?我依稀记得那是有效的,但我可能是错的。

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

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