У вас недостаточно кода, чтобы быть уверенным, но очень вероятно, что вы не держите ссылку на свои данные в любом месте приложения, кроме статических элементов класса MonitorHandler. Dalvik VM будет время от времени выгружать классы без ссылок, поэтому при следующем запуске класса он перезагружается, статическая инициализация повторно запускается, и вы получаете новый пустой список.
Суть в том, что класс , на который вы можете положиться, не будучи выгруженным во время исполнения вашего приложения Android, является самим классом Application.
Если вы хотите сохранить данные в своем приложении, единственным подходом, который работает, является поддержание ссылки на него из вашего класса Application. В случае вашего списка самый простой способ сделать это - прямо в свой класс приложения. С более сложными данными вы, вероятно, захотите создать экземпляр отдельного класса и статически ссылаться на него в своем классе Application. Вот пример, показывающий два разных способа создания данных: один статически, один лениво.
import android.app.Application;
import android.content.Context;
import com.example.DiskLruImageCache;
import java.util.ArrayList;
import java.util.List;
public class TestApp extends Application {
static final public int CACHE_SIZE = 1024 * 1024 * 15; // 15MB
private static List<String> stringList = new ArrayList<String>();
private static DiskLruImageCache imageCache = null;
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
}
public static List<String> getStringList() {
return stringList;
}
static public DiskLruImageCache getImageCache() {
if(imageCache == null) {
synchronized(context) {
if(imageCache == null)
imageCache = new DiskLruImageCache(context, "TestImages", CACHE_SIZE);
}
}
return imageCache;
}
}
Сейчас в вашей деятельности или предоставления услуг, вы можете просто позвонить TestApp.getStringList()
, чтобы получить список. Любые изменения в этом будут сохранены до тех пор, пока приложение будет запущено.
Могу ли я добавить список <> в SharedPreferences? –
@SteveJpbs: вы можете поместить 'Set' в 'SharedPreferences' на уровне API 11+. –
CommonsWare
Хмм, что не будет работать ... объект MonitorSettings - это нечто сложное. –