ユーザーがシステムにログインするたびに情報を更新する必要があるアプリケーションを開発しています。電話のデータベースも使用しています。これらすべての操作(更新、dbからのデータの取得など)には、非同期タスクを使用します。これまで、なぜそれらを使用すべきでないのかわかりませんでしたが、最近、いくつかの操作を実行すると、非同期タスクの一部が実行前に停止し、doInBackgroundにジャンプしないことがわかりました。それはあまりにも奇妙で、そのままにしておくことはできなかったので、何が問題かを確認するだけの簡単なアプリケーションをもう1つ開発しました。そして奇妙なことに、非同期タスクの総数が5に達したときにも同じ動作が発生し、6番目のタスクは実行前に停止します。
Androidのアクティビティ/アプリでのasyncTasksの制限はありますか?または、それは単なるバグであり、報告する必要がありますか?誰かが同じ問題を経験し、おそらくそれに対する回避策を見つけましたか?
これがコードです:
バックグラウンドで機能するこれらのスレッドを5つ作成するだけです。
private class LongAsync extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
isRunning = true;
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
while (isRunning)
{
}
return null;
}
@Override
protected void onPostExecute(String result)
{
Log.d("TestBug","onPostExecute");
}
}
そして、このスレッドを作成します。preExecuteに入り、ハングします(doInBackgroundには移動しません)。
private class TestBug extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
Log.d("TestBug","onPreExecute");
waiting = new ProgressDialog(TestActivity.this);
waiting.setMessage("Loading data");
waiting.setIndeterminate(true);
waiting.setCancelable(true);
waiting.show();
}
@Override
protected String doInBackground(String... params)
{
Log.d("TestBug","doInBackground");
return null;
}
@Override
protected void onPostExecute(String result)
{
waiting.cancel();
Log.d("TestBug","onPostExecute");
}
}