Android获取小型外部数据的最佳方式

时间:2013-03-28 13:31:23

标签: android performance android-asynctask

我必须得到一些外部数据。长话短说 - 它是自动完成字段的字符串数组。我在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启动时,它有时会减慢我的应用程序的速度。有什么更好的方法来获取该数据一次,然后将其保留整个应用程序生命周期?

2 个答案:

答案 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