Tôi đang phát triển một ứng dụng mà tôi cần cập nhật một số thông tin mỗi khi người dùng đăng nhập vào hệ thống, tôi cũng sử dụng cơ sở dữ liệu trong điện thoại. Đối với tất cả các hoạt động đó (cập nhật, truy xuất dữ liệu từ db, v.v.), tôi sử dụng các tác vụ không đồng bộ. Cho đến bây giờ tôi không hiểu tại sao tôi không nên sử dụng chúng, nhưng gần đây tôi đã trải nghiệm rằng nếu tôi thực hiện một số thao tác, một số tác vụ không đồng bộ của tôi chỉ dừng lại ở chế độ tiền thực thi và không chuyển sang doInBackground. Điều đó thật quá kỳ lạ khi để nó như vậy, vì vậy tôi đã phát triển một ứng dụng đơn giản khác chỉ để kiểm tra xem có gì sai không. Và kỳ lạ thay, tôi nhận được hành vi tương tự khi tổng số tác vụ không đồng bộ đạt đến 5, tác vụ thứ 6 dừng trước khi thực thi.
Android có giới hạn asyncTasks trên Activity / App không? Hay nó chỉ là một số lỗi và nó phải được báo cáo? Có ai gặp vấn đề tương tự và có thể tìm thấy giải pháp cho nó không?
Đây là mã:
Chỉ cần tạo 5 trong số các chuỗi đó để hoạt động ở chế độ nền:
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");
}
}
Và sau đó tạo chủ đề này. Nó sẽ vào preExecute và treo (nó sẽ không chuyển đến 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");
}
}