2013-03-04 58 views
0

現在我正在使用Web服務檢索存儲在服務器中的圖像和文本。我通過使用SOAP來消費它。但事情是,每次我打開應用程序,它開始再次加載&。這是因爲在一個Activity的oncreate方法中,我稱之爲asynctask,它在後臺加載數據。我的Android應用程序的性能優化

我想按照這樣的順序執行,首先我將從web服務中檢索數據,然後將它們顯示在我的應用程序中。現在,如果我正在關閉我的應用程序並再次打開它,或者如果當時沒有連接互聯網,它應顯示上次會話期間加載的數據。如何實現這個?如果你想實現這樣的事情請分享您的想法

感謝&提前

回答

0

..你應該創建一個數據庫爲您的應用程序,所以你當你關閉你的應用程序的數據不會被刪除。

因爲如果您的應用程序不是活動應用程序,那麼您的數據可能會被GC刪除。

那麼你應該創建一個服務,每運行一段指定的時間,將檢查 的互聯網連接,如果它發現它是檢查服務器中是否有新的數據。

0

我認爲,如果您更改設備的方向,將發生相同的行爲。這是因爲在重新創建應用程序時,會調用相同的方法。您應該在加載圖像的函數內設置一個標誌,然後在onCreate()onResume()方法中檢查標誌是否已設置並停止調用該函數。看看是否有幫助。

乾杯

0

如果你想「再利用」了那些圖片,你可能會認爲它們緩存到設備的SD卡。 例如:

FileOutputStream outFile = new FileOutputStream(path); 
image.compress(Bitmap.CompressFormat.JPEG, 100, outFile); 
outFile.close(); 

,然後接收從SD卡的文件和解碼,通過BitmapFactory可能在你的活動onResume()方法通過某些邏輯(例如,以檢測所述設備是否連接到因特網等):

File imageFile = new File(path); 
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath()); 

記住添加必要的權限訪問SD卡:)

0

的Android實現MVC模型 - 視圖 - 控制器)模式,在這裏你只是重複使用(在大多數情況下)現有查看類和實現控制器型號。您的活動是控制器。但是下載數據等操作應該由型號完成。

因此,您必須創建一個數據類,以便在活動破壞和創建(特別是在方向改變時發生這種情況)時倖存下來。

Activity調用AsyncTask顯然是錯誤的。

另外,請記住,在某些情況下,Android可能會終止並重新啓動應用程序進程,從而導致RAM中保存的任何數據丟失。 (不過,您可以保證看到onPause()通知)。但是,您的應用程序必須能夠從此類重新啓動中恢復。請參閱onSaveInstanceState(Bundle)onCreate (Bundle savedInstanceState)中的Bundle參數。

此外,見: Is AsyncTask really conceptually flawed or am I just missing something?

1

您可以使用磁盤高速緩存的遠程服務緩存的位圖,有關於如何做到這一點的谷歌開發者網站http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html

這將使更多信息如果沒有連接,您可以立即存儲圖像並立即顯示,或者您希望在加載遠程圖像時加載圖像。

根據您需要存儲的文本,您可以將文本與緩存中的圖像相關聯,或者使用數據設置ArrayList並將其存儲到磁盤。這裏有更多詳細信息Best Way to Cache Data in Android

最後,有一些工具可以確保您充分利用網絡代碼,例如運行ATO & T ARO工具,這樣可以幫助您通過減少網絡呼叫來優化您的應用程序降到最低。見http://developer.att.com/aro