您好我每次执行查询时都会在日志中收到此消息。但是查询仅在后台线程中执行,而Table不再有500行,而且我总是应用限制100。 请不要简单地给出一些链接,并说这个问题已经回答了。
我已经在SO中阅读了很多关于此问题的答案。但它仍然没有解决我的问题。任何人都可以给我正确的理由或解决我的问题吗?
编舞:跳过98帧!应用程序可能在其主线程上做了太多工作。
以下是我的runnable类,我将其称为新线程(新的MessageLoaderThread(限制))。start();
private class MessageLoaderThread implements Runnable {
int limit;
ArrayList<MESSAGE_HEADER> result;
public MessageLoaderThread(int limit) {
this.limit = limit;
}
@Override
public void run() {
showProgressRing(true);
result = Helper.getRows("Select * from TABLE_NAME LIMIT "+limit);
if (result != null) {
int count = result.size();
if (count > 0) {
firstVisibleMessageSeqId = result.get(0).getsequenceId();
lastVisibleMessageSeqId = result.get(count - 1).getsequenceId();
}
}
if (result != null && result.size() > 0) {
updateAdapter(result);
}
showProgressRing(false);
}
}
由于
答案 0 :(得分:0)
我知道你已经阅读了很多问题。您是否尝试过使用AsyncTask?它是Android中多线程的默认设置。
尝试不更新线程内的适配器。当您更改某些视图时,Android会执行一些动画。等待线程完成,然后更新您的视图。
答案 1 :(得分:0)
如果在使用AsyncTask
后仍然收到警告,可能是因为操作仍然很重且长时间运行。请按照java.util.concurrent
documentation
AsyncTask
中的其他api
AsyncTask旨在成为Thread和Handler的辅助类 并不构成通用的线程框架。 AsyncTasks 理想情况下应该用于短期操作(几秒钟的时间) 大多数。)如果你需要保持线程长时间运行, 强烈建议您使用提供的各种API java.util.concurrent包,如Executor,ThreadPoolExecutor和 FutureTask。