【问题标题】:MainActivity starts before SplashScreen endsMainActivity 在 SplashScreen 结束之前开始
【发布时间】:2014-05-09 17:20:56
【问题描述】:

我的 Android 应用有一个 SplashScreen 活动,持续 3 秒,然后切换到 MainActivity。

MainActivity 播放声音,它有一个按钮。我的问题是当 SplashScreen 活动可见时会播放声音。

MainActivity 的 onResume 调用 run(),run() 休眠 2 秒并播放声音。

public void run() {

    try {
        Thread.sleep(2000);
    } catch (InterruptedException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    m.start();

    try {
        Thread.sleep((int) randomValue * 1000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    m.seekTo(0);

    m.start();
    cpu.setText(EranThatWillShortYourDouble(randomValue));

    btn.setClickable(true);

}

@Override
protected void onResume() {
    super.onResume();
    run();
}

不是 SplashScreen 显示 3 秒并切换到 MainAcivity,而是持续 5 秒并在 SplashScreen 可见时播放声音。

我该怎么办?

编辑:这是我的 SplashScreen 活动:

public class SplashScreen extends Activity {

private static int SPLASH_TIME_OUT = 3000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash_screen);
    new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

        @Override
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);

            // close this activity
            finish();
        }
    }, SPLASH_TIME_OUT);
}

}

【问题讨论】:

  • 在你的Activity中使用一个runnable/post来启动声音……
  • Manifest 中的活动是如何定义的?初始屏幕应定义为:<action android:name="android.intent.action.MAIN" /> 和 <category android:name="android.intent.category.LAUNCHER" />,而 Main Activity 为 <action android:name=".ACT_Main" />(或您的 Main Activity 类的名称)和 <category android:name="android.intent.category.DEFAULT" />
  • SplashScreen 是启动器活动。
  • 查看我编辑的评论
  • 是的。这就是它在清单中的定义方式

标签: android splash-screen main-activity


【解决方案1】:

请查看AsyncTasks、Android Runnables 以及使用Handler 发布延迟的能力。

不要做 thread.sleep 在主线程中,真的很糟糕。 :)

【讨论】:

  • 我可以用什么让应用等待?
  • 为什么要让应用等待?!用户出于什么原因必须等待五秒钟才能使用您的应用程序? (启动画面的 3 个 + 线程睡眠的 2 个)加上你那里的一些随机值......这没有意义。
  • 只是为了展示我的标志。 Thread.sleep 有什么替代品吗?
  • "只是为了展示我的标志。"用户在第二次打开应用程序时不会关心您的徽标。似乎您不需要启动画面。不要使用一个。提供一个关于菜单,您可以在其中显示一个漂亮的徽标图像。您无需 SLEEP 应用,让用户尽快开始使用!
【解决方案2】:

不要在 Android 中使用启动画面。它们违反了设计准则并且提供了糟糕的用户体验。

http://developer.android.com/design/patterns/help.html#your-app

【讨论】:

  • 在加载应用程序时是否还有其他显示徽标的内容?
  • 在这一点上我不同意谷歌。如果您不需要显示 SplashScreen,那很好,但如果您需要在应用程序正常运行之前加载资源(有很多示例),那么它们是完全有效的。事实上,同样的谷歌地图应该有一个,而是显示一个蹩脚的空白屏幕(#f5f5f5 背景)大约一秒钟(在 Nexus 5 上)。规则是,不要仅仅为了显示徽标而显示启动画面。用户宁愿更快地使用您的应用而不是查看徽标,除非您需要做一些事情并且需要您的用户同时等待。
  • 不,将您的用户直接带到应用程序并在您的应用程序内显示加载进度条。闪屏完全破坏了用户体验。如果您想向用户展示您的品牌徽标和颜色,请根据您的品牌设置操作栏的样式。
  • 我还是不同意。一些 API/架构设计不适合这种模式。将用户带到他们无法通过进度条使用的应用程序并不总能转化为好的或更好的设计。不要显示无用的启动画面? (如上)是的,我同意!从不显示启动画面?没办法,应用程序设计不仅仅是黑白的。
  • 您所说的应用程序设计不仅仅是黑白分明是什么意思?有很多方法可以在您的应用程序中显示您的徽标和颜色。当用户被直接带到应用程序时,他会立即了解应用程序的工作原理,并且即使数据尚未加载,也可以快速导航到其他部分。我推荐观看 Android Design in Action,它们对在 Android 中做出设计决策非常有帮助,而且根据指南创建应用程序很有趣,这样你就可以确保你的应用程序构造正确。 youtube.com/watch?v=pEGWcMTxs3I
猜你喜欢
  • 1970-01-01
  • 2014-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
相关资源
最近更新 更多