2010-11-10 67 views
0

我有一個應用程序,它從Sdcard讀取文件並進行一些強化處理。在應用程序對象中創建一個線程

加速用戶體驗

我創建了一個Application對象的子類。 在此我創建了一個線程,其中,我實際上獲得了對Sdcard 上的文件的引用並執行了啓動活動,以便一旦顯示活動,就不會對用戶造成任何延遲。

public class GAppClass extends Application { 

    class setMapDirThread extends Thread { 

     public void run() { 
    setMapDir(); 
     } 
    } 


    public void onCreate() { 

       setMapDirThread objThread = new setMapDirThread(); 
     objThread.start(); 

     } 

private void setMapDir() { 

    Log.d(TAG, "Inside initMapComponent"); 
    String extDirName = Environment.getExternalStorageDirectory() 
    .getAbsolutePath(); 
         /* 
         some processing related to opening and reading files from Sdcard and 
         allocating cache 
         */ 

     } 
} 

上述方法是否安全使用? 即在應用程序類中創建線程來做一些後臺處理是好的方法還是壞的? 它會減慢應用程序的啓動嗎? 創建一個像這樣的線程從Sdcard讀取內容併爲內部緩存分配一些內存是否安全?

回答

0

這取決於你的應用程序做什麼。如果它只涉及活動,那麼它應該沒問題,但不建議(儘管你可能已經閱讀過)。如果您的應用程序有服務或廣播接收器,那麼您的應用程序將根據需要創建,並將啓動緩存線程等。請考慮創建一個單例類作爲您的應用程序的一部分,其中有靜態初始化程序可以做你想要的啓動。這使Application類保持清潔。您也可以考慮使用對單例類的方法調用來初始化緩存,並在需要它的活動的onCreate()的一開始調用它。我打賭你的緩存設置會很快。

+0

我有一個服務,它在接收到BootComplete Intent後立即創建。因此應用程序對象將在啓動時創建。該服務將保持很長時間直到設備斷電。 – 2010-11-10 14:43:50

+0

實際上,創建緩存和從Sdcard讀取文件是通過調用第三方api來完成的,它需要大約3秒的時間(我認爲他還在做其他一些初始化)。這一次在活動啓動期間不可持續。 – 2010-11-10 14:46:08

+0

我打算在不延遲應用程序或活動啓動時間的情況下加速初始化過程,因此有什麼建議? – 2010-11-10 14:51:32

1

我在啓動線程執行長時間運行操作時看不到任何問題。應用程序類與任何應用程序類似。 你也可以使用Android的AsyncTask類。它可以使你的工作更容易: http://developer.android.com/reference/android/os/AsyncTask.html

+0

我不認爲我們可以在Application對象中創建AsyncTask,因爲它會給出一個異常,告訴「不能創建處理程序,它沒有調用Looper.prepare」。 – 2010-11-10 14:41:59

相關問題