Saya mengembangkan aplikasi di mana saya perlu memperbarui beberapa info setiap kali pengguna masuk ke sistem, saya juga menggunakan database di telepon. Untuk semua operasi itu (pembaruan, mengambil data dari db, dll.) Saya menggunakan tugas async. Sampai sekarang saya tidak melihat mengapa saya tidak boleh menggunakannya, tetapi baru-baru ini saya mengalami bahwa jika saya melakukan beberapa operasi, beberapa tugas asinkron saya hanya berhenti pada pra-eksekusi dan tidak melompat ke doInBackground. Itu terlalu aneh untuk dibiarkan seperti itu, jadi saya mengembangkan aplikasi sederhana lain hanya untuk memeriksa apa yang salah. Dan cukup aneh, saya mendapatkan perilaku yang sama ketika jumlah total tugas async mencapai 5, yang keenam berhenti pada pra-eksekusi.
Apakah android memiliki batasan asyncTasks pada Aktivitas / Aplikasi? Atau hanya beberapa bug dan harus dilaporkan? Apakah ada yang mengalami masalah yang sama dan mungkin menemukan solusi untuk itu?
Ini kodenya:
Cukup buat 5 utas tersebut untuk bekerja di latar belakang:
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");
}
}
Dan kemudian buat utas ini. Ini akan masuk ke preExecute dan hang (tidak akan masuk ke 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");
}
}