我必须得到一些外部数据。长话短说 - 它是自动完成字段的字符串数组。我在AsyncTask
中使用Activity
进行了操作。一切正常,我只是从外部服务器获取文件,将其放入String数组并附加到我的自动完成字段:
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
启动时,它有时会减慢我的应用程序的速度。有什么更好的方法来获取该数据一次,然后将其保留整个应用程序生命周期?
答案 0 :(得分:2)
您始终可以为数据使用静态引用,这样一来,只要VM正在运行,您就会确保它会一直存在。
你可以创建一个类并调用类似DataStorage
的类,并在该类中添加一个静态ArrayAdapter对象
public class DataStorage{
public static ArrayAdapter<String> sharedData;
}
以及在您想要加载该适配器的代码中的任何位置:
if (DataStorage.sharedData == null){
// write code to set sharedData
}
这称为Singleton模式,您可以在此处阅读更多相关信息:Singleton Wiki
答案 1 :(得分:1)
您可以获取此数据一次,然后将其存储在应用的Application
级别中。
因此,下次启用此Activity
时,请先检查应用程序中的数组
class不为空,不运行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