2014-01-24 74 views
0

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

+0

您需要应用启动画面,并在加载打开您的主要活动后为您的应用程序加载所需的背景 –

+0

http://stackoverflow.com/questions/16750059/why-my-splash-screen-dont -show-的图像/ 16750316#16750316。不知道您的加载指标是什么意思 – Raghunandan

回答

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线程。有关详细信息,请参阅文档。

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

优点:

,因为您的主要活动一直待在无需处理器/线程。

更新进度条将变得轻而易举,因为您始终保持在UI线程中。

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