2013-05-12 6 views
1

У меня есть автономные определения JSON (в папке с ресурсами) - и с ними я создаю свою модель данных. Он имеет 8 классов, которые наследуют (расширяют) один абстрактный класс модели.Лучший дизайн модели API

Было бы лучшим решением, если бы я разобрал JSON и сохранил модель в памяти (более или менее всего - целое или строковое) на протяжении всего жизненного цикла приложения или было бы разумнее, если бы я разбирал файлы JSON как они нужны?

благодаря

ответ

3

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

Эти данные могут быть понятны GC, если система решила, что ей требуется больше памяти.

Это означает, что когда пользователь возвращается к приложению, и если вы передадите на то, что данные находятся в памяти, вы можете столкнуться с исключением. Поэтому вам нужно рассмотреть эту ситуацию.

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

Другое решение, на которое вы можете обратить внимание, - это проанализировать эти данные при первом запуске приложения до SQLite DB и использовать его оттуда или даже сохранить его в БД в первую очередь. Это даст вам преимущества обоих миров, вам не придется анализировать данные перед их использованием, и у вас будет быстрый доступ к нему с помощью Cursor, и вы не столкнетесь с проблемой удаления данных в случае недостаточной памяти в система.

+0

Операция БД была бы дешевле, чем предыдущие упомянутые? То есть извлекает данные из таблицы дешевле, чем разбор JSON снова и снова для каждого запроса или он дешевле, чем хранение модели в памяти? – user584513

+0

доступ к памяти будет самым быстрым, но получение данных из БД будет намного дешевле, чем получение его из файла путем его разбора. используя БД, вы мгновенно получаете доступ к определенной требуемой строке данных, в то время как разбор файла занимает больше времени. –

+0

спасибо Эмиль! :) – user584513

1

Я бы сразу прочитал все содержимое файла и сохранил его как статическую строку где-нибудь в своем приложении, доступную всем компонентам приложения (SingleTone Pattern), поскольку обычно сохранение небольшой строки в памяти намного дешевле чем открытие и закрытие файлов часто.

Чтобы решить точку GC @Emil указал, вы можете написать код что-то вроде этого:

public class DataManager { 
    private static String myData; 
    public static String getData(Context context){ 
     if(myData == null){ 
      loadData(context); 
     } 
     return myData; 
    } 
    private static void LoadData(Context context){ 
     context.getAssets(). 

     try { 
      BufferedReader reader = new BufferedReader(
        new InputStreamReader(getAssets().open("data.txt"), "UTF-8")); 

      StringBuilder builder = new StringBuilder(); 
      do { 
       String mLine = reader.readLine(); 
       builder.append(mLine); 
      } while (mLine != null) 


      reader.close(); 
      myData = builder.toString(); 
     } catch (IOException e) { 
     } 
    } 
} 

И из любого класса в приложении, которое имеет допустимый контекст ссылка:

String data = DataManager.getData(context); 
Смежные вопросы