Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Статическая Linkedhashmap или Sharedpreference?

Автор вопроса: RizvanОтветов: 2

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");
  }}
  1. Какой из них лучше подходит для уменьшения утечек памяти?
  2. Если я храню более 30-40 ключей, какой из них предпочтительнее?
  3. Если я использую общие настройки, я не потеряю производительность при проверке и обновлении ключей ??
  4. Есть ли альтернатива, которую я мог бы использовать вместо этих двух решений? (Не упоминайте здесь Intent Extras.)

androidsharedpreferencesjavaperformancelinkedhashmap

Ответы

Ответ 1 · рейтинг 2 · Carlos Robles

Использование вашей деятельности в качестве статического источника данных и зависимость других ваших действий от нее (и даже знание того, что эта деятельность существует) является плохой практикой, согласно многим принципам (высокая связанность, развязка, минимальная зависимость, защищенные варианты...), но у команды Android есть некоторые похожие подходы, на которые вы можете положиться, но по той же причине они не должны быть первым вариантом.

Я бы предпочел:

Если данные должны быть постоянными:

  • SharedPreferences для небольшого объема данных
  • База данных SQLite для большего объема данных

если вам не нужно сохранять данные

  • Служба, которая всегда работает, и вы привязываетесь ко всем своим действиям, где у вас есть все общие данные и функции.
  • Вспомогательный объект, в котором у вас есть данные.

Вы можете узнать больше на этой официальной странице часто задаваемых вопросов по Android или на этой отличный SO answer, основанный на этом часто задаваемые вопросы, но с некоторыми примерами кода

Ответ 2 · рейтинг 1 · axierjhtjz

Как указано здесь,

Плюсы и минусы SQLite и общих настроек

для больших групп данных> 30-40 ключей я бы предложил вам использовать SQLite. Он более мощный, чем SharedPreferences, и дает вам возможность делать запросы на основе ключей, которые вы хотите найти.

С другой стороны, реализация SQLite немного сложнее и длиннее для кода, чем использование SharedPreferences.

Наличие статической LinkedHashMap или любой другой статической переменной никогда не является хорошим вариантом для обслуживания кода и читабельности, вы должны использовать его только в том случае, если нет другого варианта.

Надеюсь, поможет. :)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы