Kullanıcı sisteme her giriş yaptığında bazı bilgileri güncellemem gereken bir uygulama geliştiriyorum, ayrıca telefondaki veritabanını da kullanıyorum. Tüm bu işlemler için (güncellemeler, db'den veri alma vb.) Zaman uyumsuz görevler kullanıyorum. Şimdiye kadar neden kullanmamam gerektiğini anlamadım, ancak son zamanlarda bazı işlemler yaparsam bazı eşzamansız görevlerimin önceden yürütmede durduğunu ve doInBackground'a atlamadığını deneyimledim. Bu, onu böyle bırakmak için çok garipti, bu yüzden neyin yanlış olduğunu kontrol etmek için başka bir basit uygulama geliştirdim. Ve yeterince tuhaf, toplam eşzamansız görevlerin sayısı 5'e ulaştığında aynı davranışı görüyorum, 6'ncı ön-yürütme sırasında durur.
Android'in Etkinlik / Uygulamada asyncTasks sınırı var mı? Yoksa bu sadece bir hata mı ve rapor edilmesi mi gerekiyor? Kimse aynı sorunu yaşadı mı ve belki bir çözüm buldu mu?
İşte kod:
Arka planda çalışmak için bu ileti dizilerinden 5 tanesini oluşturmanız yeterlidir:
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");
}
}
Ve sonra bu konuyu yaratın. PreExecute'a girecek ve askıda kalacaktır (doInBackground'a gitmeyecek).
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");
}
}