2

嗨,我每次执行查询时都会在日志中收到此消息。但是查询只在后台线程中执行,表没有超过 500 行,而且我总是应用限制 100。请不要简单地给出一些链接并说这个问题已经回答。

我已经阅读了很多关于这个的答案。但它仍然没有解决我的问题。谁能给我适当的理由或解决我的问题?

编舞:跳过98帧!应用程序可能在其主线程上做了太多工作。

以下是我的可运行类,我将其称为 new Thread(new MessageLoaderThread(limit)).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);
        }
    }

谢谢

4

2 回答 2

0

如果您在使用后仍然收到警告,AsyncTask可能是因为操作仍然繁重且运行时间长。尝试使用文档java.util.concurrent中建议的其他 apiAsyncTask

AsyncTask 被设计为围绕 Thread 和 Handler 的辅助类,并不构成通用线程框架。AsyncTasks 最好用于短时间的操作(最多几秒钟)。如果您需要保持线程长时间运行,强烈建议您使用 java.util.concurrent 包提供的各种 API,例如Executor、ThreadPoolExecutor 和 FutureTask。

于 2016-04-19T12:50:42.457 回答
0

我知道你已经阅读了很多问题。您是否尝试过使用AsyncTask?它是 Android 中多线程的默认设置。

尽量不要在你的线程中更新你的适配器。当您更改某些视图时,Android 会执行一些动画。等待线程完成,然后更新您的视图。

于 2016-04-19T12:38:29.263 回答