2

こんにちは、クエリを実行するたびにこのメッセージがログに記録されます。ただし、クエリはバックグラウンド スレッドでのみ実行され、テーブルには 500 行以下であり、常に制限 100 を適用します。単にリンクを提供して、この質問が既に回答されていると言ってはいけません。

これに関して、SOで多くの回答を読みました。しかし、それでも私の問題は解決しませんでした。誰かが私の問題の適切な理由や解決策を教えてくれますか?

振付師: 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で提案されているように、他の API を使用してみてくださいAsyncTask

AsyncTask は、Thread と Handler のヘルパー クラスとして設計されており、一般的なスレッド フレームワークを構成するものではありません。AsyncTasks は、理想的には短い操作 (せいぜい数秒) に使用する必要があります。スレッドを長時間実行し続ける必要がある場合は、次のような java.util.concurrent パッケージで提供されるさまざまな API を使用することを強くお勧めします。 Executor、ThreadPoolExecutor、および FutureTask。

于 2016-04-19T12:50:42.457 に答える