【发布时间】:2012-03-28 02:09:23
【问题描述】:
我正在开发一个应用程序,每次用户登录系统时我都需要更新一些信息,我还使用手机中的数据库。对于所有这些操作(更新、从数据库检索数据等),我使用异步任务。到目前为止,我不明白为什么不应该使用它们,但最近我体验到,如果我执行一些操作,我的一些异步任务只会在预执行时停止并且不会跳转到 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");
}
}
【问题讨论】:
标签: android multithreading android-asynctask