ฉันกำลังพัฒนาแอปพลิเคชันที่ฉันต้องอัปเดตข้อมูลทุกครั้งที่ผู้ใช้เข้าสู่ระบบฉันยังใช้ฐานข้อมูลในโทรศัพท์ด้วย สำหรับการดำเนินการทั้งหมด (การอัปเดตการดึงข้อมูลจากฐานข้อมูลและอื่น ๆ ) ฉันใช้งาน async จนถึงตอนนี้ฉันไม่เห็นว่าทำไมฉันไม่ควรใช้มัน แต่เมื่อเร็ว ๆ นี้ฉันพบว่าถ้าฉันดำเนินการบางอย่างงาน async ของฉันเพียงแค่หยุดดำเนินการล่วงหน้าและอย่าข้ามไปที่ doInBackground มันแปลกเกินไปที่จะปล่อยไว้แบบนั้นดังนั้นฉันจึงพัฒนาแอปพลิเคชั่นง่ายๆอีกตัวเพื่อตรวจสอบว่ามีอะไรผิดปกติ และแปลกพอฉันได้รับพฤติกรรมเดียวกันเมื่อจำนวนงาน async ทั้งหมดถึง 5 งานที่ 6 หยุดการดำเนินการล่วงหน้า
Android มีการ จำกัด asyncTasks ใน Activity / App หรือไม่? หรือเป็นเพียงข้อผิดพลาดบางอย่างและควรรายงาน? มีใครประสบปัญหาเดียวกันและอาจพบวิธีแก้ปัญหาหรือไม่?
นี่คือรหัส:
เพียงสร้าง 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");
}
}