2014-01-24 69 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線程沒有負擔。