这将是一个关于表现的问题。首先对不起我的英语,但是,让我们去,我的应用程序是餐馆的菜单。
它运作良好,但我希望改进,我希望它足够快,不要太慢。
例如:
在第一个我得到的" 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模式具有良好的性能。
我错过了什么?
答案 0 :(得分: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();
}