我目前面臨以下問題:每當我的Android應用程序啓動時,它需要執行一些耗時的初始化代碼。沒有此代碼,應用程序中的所有活動/服務將無法正常工作。初始化Android應用程序
到目前爲止,我已將此初始化代碼放入SplashScreen活動中,我將其聲明爲清單中的MAIN活動。初始化代碼執行完畢後,我完成()初始屏幕並開始實際的主要活動,即由多個選項卡組成的活動,用戶可以從中進行其他幾項活動。
現在的問題是:當我的應用程序放在後臺,經過一段時間和啓動其他應用程序後,我的應用程序/進程被終止。當我從主屏幕重新啓動它時,Android會恢復活動堆棧(任務)並在其上調用onCreate()。但是,啓動畫面活動以及初始化代碼不會執行,這會導致異常。
我現在可以將初始化代碼放在應用程序的onCreate()中,但是這會導致黑屏,直到方法結束。
有沒有人有一個想法,我在哪裏以及如何在啓動時正確地初始化我的應用程序?
初始化代碼:
public void init() {
if (initialized) {
return;
}
// Initialize terms
List<Tag> tags= DynamicDao.loadAll(Tag.class);
int numTags = tags.size();
terms = new String[numTags];
for (int i = 0; i < numTags; i++) {
terms[i] = tags.get(i).getTag();
}
// Initialize document-term matrix
List<Item> items = DynamicDao.loadAll(Item.class);
createDocumentTermMatrix(items);
initialized = true;
}
注意:一個項目有幾個相關的標籤,從中我需要創建一個文檔向量。
在初始化期間,我創建了一個大小爲50x70的雙精度矩陣,以便加速某些計算。這個計算在Nexus One上需要大約2-3秒,對於HTC Magic來說需要6秒,並且在模擬器上仍然要稍長一點。初始化算法不能再被優化。最終(但我不太相信這個想法)我可以在首次啓動應用程序時將此計算結果寫入文件中,然後閱讀並隨後更新...... – Matthias 2010-09-10 17:45:06
編寫3500雙打應該不需要3秒鐘。看起來有點不對 – Falmarri 2010-09-10 17:55:51
也許我需要提供一些更多的細節:這個矩陣是一個字 - 文檔矩陣,我使用應用程序的SQLite數據庫中的條目進行預先計算,然後用它計算相似性。 – Matthias 2010-09-10 18:02:34