0

我必须得到一些外部数据。长话短说 - 它是一个用于自动完成字段的字符串数组。我AsyncTask在我的Activity. 一切正常,我只是从外部服务器获取文件,将其放入字符串数组并附加到我的自动完成字段:

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启动时,有时都会使我的应用程序变慢一点。什么是只获取一次数据然后在整个应用程序生命周期中保留它的更好方法?

4

2 回答 2

2

您始终可以对数据使用静态引用,这样您就可以确保只要 VM 正在运行,它就会一直存在。

您可以创建一个类并将其命名为类似的DataStorage名称,并在该类中添加一个静态 ArrayAdapter 对象

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

并且无论何时要加载该适配器,都可以从代码中的任何位置:

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

这称为单例模式,您可以在此处阅读更多信息:Singleton Wiki

于 2013-03-28T13:40:46.857 回答
1

您可以一次获取此数据,然后将其存储在您Application的应用程序类中。因此,下次打开此功能时,请先Activity检查应用程序类中的数组是否不为空并且不运行AsyncTask.

要将 Application 类添加到您的应用程序,请执行以下操作:

1.创建一个扩展 Application 的类,如下所示:

public class YourApplicationClass extends Application
{   
    ....
}

2.并在您的清单中将其定义为您的应用程序类,如下所示:

<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" >
    ....    

您的应用程序中的所有其他 Activity 类都可以访问此类。

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

于 2013-03-28T13:33:28.050 回答