2017-02-22 18 views
0

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

Он работает хорошо, но я хочу улучшить, я хочу, чтобы он был достаточно быстрым, чтобы не быть таким медленным.

Например:

В первом я получаю «! Пропускаются хх кадров Приложение может делать слишком много работы на своем главном потоке.», Так что я прочитал лучшее решение не ставить так много больших изображений и сделать все необходимые для подключения к базе данных в тему или Бег

Вот мой код в фрагменте:.

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 

    controller = new MDAlacarte(getActivity()); 
    int idCategoria = Integer.parseInt(getArguments().getString("idCategoria")); 
    int idSubcategoria = Integer.parseInt(getArguments().getString("idSubcategorias")); 

    buscarPratos(idCategoria,idSubcategoria); 

} 

private void buscarPratos(final int idCategoria, final int idSubcategoria) { 

    getActivity().runOnUiThread(new Runnable(){ 
     public void run() { 
      //If there are stories, add them to the table 

      pratosLista = controller.getPratosPorCategoriaAlacarte(idCategoria,idSubcategoria); 
      int tamanho = pratosLista.size(); 

      for (int i = 0; i < tamanho ; i++) { 


       pratoObj = new Prato(pratosLista.get(i).get("nome"), 
         pratosLista.get(i).get("descricao"), 
         pratosLista.get(i).get("codigo"), 
         pratosLista.get(i).get("categoria"), 
         pratosLista.get(i).get("preco"), 
         pratosLista.get(i).get("tipo"), 
         pratosLista.get(i).get("subcategoria")); 


       pratos.add(pratoObj); 
       nomePratos.add(pratosLista.get(i).get("nome")); 

      } 

     } 
    }); 
} 

, но проблема в том, что идет медленно, иногда, когда я добавить столько вкладок, как в CATEGORIA " Напитки ", то есть" Бебидас "здесь, в Бразилии, и настолько медленны чтобы выполнить это, это похоже на 8 вкладок, например, каждый мой фрагмент выполняет этот код для каждой вкладки, которую они имеют.

Это лучшая практика? Это список, и я сделал шаблон ViewHolder хорошим.

Что мне не хватает?

+0

Вам не нужно 'runOnUiThread' там. .. –

+0

гул почему cricket_007? – Wavrik

+0

Поскольку этот раздел кода уже находится в потоке пользовательского интерфейса после 'onViewCreated' –

ответ

0

Чтобы получить отрабатывают UI тему, вы можете использовать AsyncTask: https://developer.android.com/reference/android/os/AsyncTask.html

Вы можете просто заменить getActivity().runOnUiThread(new Runnable(){...}; этим

private void buscarPratos(final int idCategoria, final int idSubcategoria) { 
    new AsyncTask<Void, Void, Void>() { 
     @ Override 
     public void doInBackground() { 
      // If there are stories, add them to the table 

      pratosLista = controller.getPratosPorCategoriaAlacarte(idCategoria,idSubcategoria); 
      int tamanho = pratosLista.size(); 

      for (int i = 0; i < tamanho; i++) { 
       nome = pratosLista.get(i).get("nome") 
       pratoObj = new Prato(nome, 
         pratosLista.get(i).get("descricao"), 
         pratosLista.get(i).get("codigo"), 
         pratosLista.get(i).get("categoria"), 
         pratosLista.get(i).get("preco"), 
         pratosLista.get(i).get("tipo"), 
         pratosLista.get(i).get("subcategoria")); 

       pratos.add(pratoObj); 
       nomePratos.add(nome); 
      } 
     } 
    }).execute(); 
} 
+0

Я использую Asynctask для подключения к Интернету, но не для операций SQLITE. – Wavrik

+0

Спасибо, но теперь у меня другая проблема. Моя функция Asynctask выполняется перед моим адаптером при создании представления из моего фрагмента: Как я могу выполнить это раньше? – Wavrik

+0

Ну, немного больше кода было бы полезно. И не могли бы вы подтвердить свою проблему? – Androbin