我正在开发一个应用程序,每次用户登录系统时我都需要更新一些信息,我也在电话中使用数据库。对于所有这些操作(更新,从db检索数据等),我使用异步任务。到现在为止,我还不明白为什么不使用它们,但是最近我体验到,如果我执行一些操作,一些异步任务只会在执行前停止,而不会跳转到doInBackground。真是太奇怪了,不能像现在这样保留它,所以我开发了另一个简单的应用程序来检查问题所在。奇怪的是,当异步任务总数达到5个时,我会得到相同的行为,第6个异步任务在预执行时停止。
android在Activity / App上是否有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");
}
}