Android-приложение с двумя решениями для передачи данных между действиями (без намерений, пожалуйста!)
public class A {
public static LinkedHashMap<String,String> hashStore = new LinkedHasMap<String,String>();
public void doHttp(){
//Some HTTP call and store some json value
hashStore.put("data","jsonKeyValue");
}
public void onDestroy(){
hashStore.remove(key);// remove data key
hashStore.clear();
}
}
public class B {
public void getHttp(){
//Some HTTP call
String extra = A.hashStore.get("data");
}}
// SharedPreference Call
public class A{
SharedPreference hashPref ; //declaration on onCreate
public void dohttp(){
//Some Http and Store value in SharedPreferences
hashPref.put("data","jsonkeyvalue");
hashPref.apply();
}}
public class B{
SharedPreference hashPref ; //declaration on onCreate
public void getHttp(){
//Some HTTP call
String extra = hashPref.get("data");
}}
- Какой из них лучше подходит для уменьшения утечек памяти?
- Если я храню более 30-40 ключей, какой из них предпочтительнее?
- Если я использую общие настройки, я не потеряю производительность при проверке и обновлении ключей ??
- Есть ли альтернатива, которую я мог бы использовать вместо этих двух решений? (Не упоминайте здесь Intent Extras.)
Ответ 1 · рейтинг 2 · Carlos Robles
Использование вашей деятельности в качестве статического источника данных и зависимость других ваших действий от нее (и даже знание того, что эта деятельность существует) является плохой практикой, согласно многим принципам (высокая связанность, развязка, минимальная зависимость, защищенные варианты...), но у команды Android есть некоторые похожие подходы, на которые вы можете положиться, но по той же причине они не должны быть первым вариантом.
Я бы предпочел:
Если данные должны быть постоянными:
- SharedPreferences для небольшого объема данных
- База данных SQLite для большего объема данных
если вам не нужно сохранять данные
- Служба, которая всегда работает, и вы привязываетесь ко всем своим действиям, где у вас есть все общие данные и функции.
- Вспомогательный объект, в котором у вас есть данные.
Вы можете узнать больше на этой официальной странице часто задаваемых вопросов по Android или на этой отличный SO answer, основанный на этом часто задаваемые вопросы, но с некоторыми примерами кода
Ответ 2 · рейтинг 1 · axierjhtjz
Как указано здесь,
Плюсы и минусы SQLite и общих настроек
для больших групп данных> 30-40 ключей я бы предложил вам использовать SQLite. Он более мощный, чем SharedPreferences, и дает вам возможность делать запросы на основе ключей, которые вы хотите найти.
С другой стороны, реализация SQLite немного сложнее и длиннее для кода, чем использование SharedPreferences.
Наличие статической LinkedHashMap или любой другой статической переменной никогда не является хорошим вариантом для обслуживания кода и читабельности, вы должны использовать его только в том случае, если нет другого варианта.
Надеюсь, поможет. :)