사용자가 시스템에 로그인 할 때마다 일부 정보를 업데이트해야하는 응용 프로그램을 개발 중이며 전화에서도 데이터베이스를 사용합니다. 모든 작업 (업데이트, db에서 데이터 검색 등)에 대해 비동기 작업을 사용합니다. 지금까지는 왜 사용하지 말아야하는지 알지 못했지만 최근에 일부 작업을 수행하면 일부 비동기 작업이 사전 실행에서 중지되고 doInBackground로 이동하지 않는 것을 경험했습니다. 그렇게 놔두기에는 너무 이상했기 때문에 문제를 확인하기 위해 또 다른 간단한 응용 프로그램을 개발했습니다. 이상하게도 총 비동기 작업 수가 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");
}
}