5

タイマーを使用して 5 ~ 10 秒ごとに AsyncTask を呼び出す Android アプリがあります (java.util.Timer と java.util.TimerTask を使用)。AsyncTask は、Amazon AWS S3 データベースから画像データを取得し、メイン UI アクティビティの ImageView を読み込みます。

これは 1 時間か 2 時間は問題なく動作しますが、その後不可解なエラー メッセージが表示され、アプリが強制終了されます。エラーメッセージは「ルーパー」からのもので、次のいずれかを示しています。

Could not create epoll instance.  errno=24

また

Could not create wake pipe

Web で検索すると、問題がファイル記述子に関係している可能性があることが示されているようです (開いているファイル記述子が多すぎますか?)。コードを確認しましたが、ファイル、ストリーム、または接続が閉じられていない場所は見当たりません。

アプリが強制終了されると、logcat には次のような AndroidRuntime からのメッセージがあります。

FATAL EXCEPTION: main

誰かがこれらのメッセージについての手がかりを持っていますか、または修正する方法はありますか? ありがとうございました!

4

2 に答える 2

-1

アラームを使用してタスクをあまりにも早くトリガーしたときに、コードに同じバグが発生しました。

コードを変更して修正し、メソッドの平均実行時間の後にのみアラームに追加されて再度実行されるようにしました (さらに、念のために少し余分な時間を追加しました)。実行が完了するよりも早くタスクを追加すると、最終的にルーパーがいっぱいになり、エラーがスローされます。

私の理解では、本質的にルーパーとは、スレッドによって実行されるもののキューです。

于 2013-08-09T22:44:41.673 に答える