最佳答案
我正在开发一个应用程序,我需要更新一些信息每次用户登录到系统,我也使用手机中的数据库。对于所有这些操作(更新、从数据库检索数据等等) ,我使用异步任务。到目前为止,我还不知道为什么我不应该使用它们,但是最近我体验到,如果我做一些操作,我的一些异步任务就会在预执行时停止,而不会跳转到 doInBack。这实在是太奇怪了,所以我开发了另一个简单的应用程序来检查哪里出错了。奇怪的是,当异步任务总数达到5时,我得到了相同的行为,第6个异步任务在预执行时停止。
Android 在 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 并挂起(它不会进入 doInBack)。
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");
}
}