Android onCreate加载延迟

时间:2014-01-24 04:15:24

标签: android

我的应用程序需要一段时间才能启动(MainActivity),所以我想要一个单独的线程来显示加载指示器10秒钟(忽略此10秒内的所有其他触摸事件)然后自动消失。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

如果您的主要活动需要几秒钟来初始化,那么初始化应该是在单独的线程上,而不是启动屏幕。您永远不应该通过耗时的操作来阻止UI线程。

您可以按照以下方式组织初始化:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // set up the splash screen
    setContentView(R.layout.splash_screen);

    // set up and start the initialization thread
    final Handler handler = new Handler();
    new Thread() {
        public void run() {
            // Do time-consuming initialization.
            // When done:
            handler.post(new Runnable() {
                public void run() {
                    // set up the real UI
                }
            });
        }
    }.start();
}

这将删除启动画面,并在耗时的初始化完成后将其替换为真实的UI。

如果您总是要等待至少10秒,您可以在启动线程之前在本地变量中记录开始时间,然后在初始化完成后,如果还有剩余时间,您可以使用postDelayedpostAtTime

以上代码使用HandlerThread,因为您想要做的事情相当简单。作为替代方案,您可以使用AsyncTask,这基本上是相同的。它还有内置工具,允许您发布"初始化进程到UI线程。有关详细信息,请参阅文档。

答案 1 :(得分:0)

  1. 使用初始屏幕覆盖主要活动(任何边对边图像都可以)。
  2. 使用Progress Bar
  3. 显示进度条
  4. 禁用“启动”屏幕的触摸事件,以便触摸事件不会传递到主活动屏幕。
  5. 在后台或特定时间后完成加载时,从视图中删除启动画面。
  6. 好处:

      

    不需要处理程序/线程,因为您一直都在主要活动中。

         

    更新进度条将是轻而易举的,因为您一直都在UI线程中。

         

    应用程序不太可能崩溃,因为在加载过程中禁用了触摸事件,因此UI线程没有负担。