2013-03-28 55 views
0

我必須獲取一些外部數據。長話短說 - 這是一個自動填充字段的字符串數組。我在Activity中用AsyncTask做了它。一切正常,我只是得到來自外部服務器上的文件,把它變成一個String數組,重視我的自動完成場:Android獲取小型外部數據的最佳方式

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
    SearchActivity.this, android.R.layout.select_dialog_item, 
    result); 
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.editCity); 
textView.setAdapter(adapter); 

的問題是我每次去具體Activity時間我這樣做。每次啓動AsyncTask時,它有時會使我的應用程序變慢一點。什麼是更好的方式來獲取數據只有一次,然後保持整個應用程序生命週期?

回答

2

您可以隨時使用您的數據的靜態引用,這樣你將確保只要VM運行它會呆在那裏。

,你可以創建一個類,並調用它像DataStorage和類中添加靜態ArrayAdapter對象

public class DataStorage{ 
    public static ArrayAdapter<String> sharedData; 
} 

,並在你的代碼的任何地方,只要你想加載適配器:

if (DataStorage.sharedData == null){ 
    // write code to set sharedData 
} 

這就是所謂的Singleton模式,你可以在這裏閱讀更多關於它:Singleton Wiki

+0

謝謝,我剛剛實現它,它的工作原理 – Dawid

1

您可以獲取此數據一次,然後將其存儲在您的應用的Application類中。 所以下一次你打開這個Activity首先檢查你的應用程序 類中的數組是否爲空並且不運行AsyncTask

要將應用程序類添加到您的應用程序做到這一點:

創建擴展應用程序像這樣一類:

public class YourApplicationClass extends Application 
{ 
    .... 
} 

2.並在manifast把它定義爲您的應用程序類是這樣的:

<application 
    android:allowBackup="true" 
    android:name=".YourApplicationClass" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen" > 
    ....  

此類對所有t他在你的應用程序中的其他Activity類。

文檔:http://developer.android.com/reference/android/app/Application.html

相關問題