数据库

时间:2017-02-22 13:21:25

标签: android performance sqlite

这将是一个关于表现的问题。首先对不起我的英语,但是,让我们去,我的应用程序是餐馆的菜单。

它运作良好,但我希望改进,我希望它足够快,不要太慢。

例如:

在第一个我得到的" Skipped 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"));

            }

        }
    });
}

但问题是,当我添加如此多的标签时,有时很慢,例如在条款和饮料中#34;饮料&#34;那是&#34; Bebidas&#34;在巴西这里执行它的速度很慢,它就像8个标签,每个例子我的片段为每个标签执行这个代码。

这是最佳做法吗?这是一个列表视图,我使ViewHolder模式具有良好的性能。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

要从UI线程中解决问题,您可能希望使用AsyncTaskhttps://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();
}