2017-02-22 19 views
0

これはパフォーマンスについての質問です。まず最初は私の英語は残念ですが、行こう、私はレストランのメニューであるアプリケーションを持っています。データベース上のパフォーマンスandroid multiple connection

これはうまくいっていますが、私は改善したい、遅くならないほど速くしたいです。例えば

:最初に

i「はスキップXXフレームをアプリケーションがそのメインスレッド上であまりにも多くの仕事をしていることがあります!。」を得るので、私は最善の解決策は、非常に多くの拡大イメージを入れないことです読み。そしてスレッドまたは実行中のデータベースへのすべての接続を行う

ここでは、フラグメントの私のコードです:

@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におけるようなので、多くのタブを追加するときには、「時々遅いですブラジルの "Bebidas"で、とてもゆっくりとしている "ドリンク"これを実行するには、8個のタブのようになります。例えば、各フラグメントは、それぞれのタブに対してこのコードを実行します。

これはベストプラクティスですか?これはリストビューであり、ViewHolderパターンを優れたパフォーマンスにしました。

私は何が欠けていますか?

+0

getActivity().runOnUiThread(new Runnable(){...};を置き換えることができます。 .. –

+0

ハムなぜcricket_007? – Wavrik

+0

このセクションは、 'onViewCreated'の後のUIスレッドに既にあるので、 –

答えて

0

UIスレッドオフ作業を取得するには、あなたがAsyncTaskを使用することがあります: https://developer.android.com/reference/android/os/AsyncTask.html

あなたは、単にあなたがそこに `runOnUiThread`を必要としないこの

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

関連する問題