2010-12-09 63 views
2

我的應用程序在開始時需要大量時間加載,同時屏幕空白。有沒有辦法在應用程序啓動時顯示圖像,然後在完成加載後顯示佈局?android啓動圖像

回答

4

如果您的應用程序中有多個活動,但如果您只是在討論單個活動,則該活動本身不會顯示任何內容,直到onResume()爲調用。在此之前,唯一會顯示的是應用程序/活動的背景圖像。爲您的活動設置背景圖片可以大大提高感知的啓動速度,因爲它們會立即顯示。 Romain Guy在這裏討論一下背景圖像:http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/

如果你的應用程序有很多啓動嘎吱嘎吱做,那麼你應該做一個單獨的線程的工作,並讓onCreate(),onStart(),onResume()快速進行。這些方法應該儘可能少地做,以便活動儘快顯示給用戶。如果您希望加載或啓動畫面在加載時可見,則可以使用不同的方法。爲了簡單起見,我們假設你只是想要一個沒有動畫的加載屏幕,只是一個圖像。一種方法是通過XML將活動背景圖像設置爲加載屏幕圖像。在onCreate()啓動一個線程與您的加載過程,所以它不需要等待它完成,以繼續啓動活動。在XML佈局中,爲您的佈局設置根視圖組,以使其可見性消失。這樣你的視圖就不會出現,它只會顯示背景加載圖像。它也將允許這些觀點被誇大和設置。

然後,當這些過程完成後,將ViewGroup的可見性設置爲可見並讓用戶看到它,如果需要,也可以更改背景圖像。

如果你不想去啓動屏幕的路線,仍然確保在啓動方法沒有長時間運行的方法發生,讓他們到另一個線程。您可以立即顯示您的活動,並根據需要放置加載動畫。

顯然有很多方法,這一切取決於你真正需要什麼。希望在某些方面有所幫助。

1

我會問自己 - 爲什麼需要很長時間才能加載?你是否描述過它?你能改善嗎?你應該專注於此。除了這個,是的,你可以添加一個啓動畫面(我建議人們不要這樣做) - 你可以使用ViewFlipper或FrameLayout在兩個佈局之間切換,也可以有兩個單獨的活動。

+0

爲什麼你不建議啓動畫面?它們非常無處不在,幾乎每個人都知道它們在看到它們時的樣子。 UI設計的一個主要租戶(就我而言)不會讓用戶感到驚訝。啓動畫面是他們習慣看的東西。只是好奇你爲什麼認爲啓動屏幕不是要走的路 - 我可能只是改變我的想法:) – SRM 2010-12-09 02:20:47

+0

我發現啓動畫面沒問題,但不喜歡如果你不能點擊它們繼續進行,但不得不等待延遲開發人員投入。 – 2010-12-09 02:36:36

+0

好..應用程序讀取RSS源並以列表形式顯示信息。因此整個RSS提要必須被解析,否則它沒有開始活動的意義......提要中有超過40個項目... – 2010-12-09 23:45:32

1

Theres有幾種方法可以做到這一點,但最簡單和最直接的方法是從您的啓動畫面活動啓動您的長時間加載活動。

另一種技術是將初始化和加載卸載到單獨的線程。

1

您也可以在後臺線程中完成所有耗時的工作,並且一旦您的佈局被充滿並且所有資源都被加載,就可以使用Viewgroup.addView

  1. 把一些最低佈局在您的活動
  2. 創建在onStart線程加載使用LayoutInflator
  3. 你的資源和佈局一旦你交一個Runnable通過處理器來交換佈局做主線使用addView的活動
1

我想更新這個問題到今年,因爲我有同樣的問題,我發現它在谷歌。

在值目錄,如果你沒有它,創建一個樣式文件是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppBaseTheme" parent="android:Theme.Holo.NoActionBar.Fullscreen"> 
     <item name="android:windowBackground">@color/your_color</item> 
    </style> 
</resources> 

現在去AndroidManifest.xml中,和樣式添加到您的活動啓動:

<activity 
    android:name=".Main" 
    android:theme="@style/AppBaseTheme" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
0

你需要飛濺screnn。你可以看看我的answer多數民衆贊成在解釋啓動畫面。