我没有得到这个,这真让我感到沮丧。
我所有长时间运行的操作都发生在AsyncTask
中。例如,用户以某种方式与应用程序交互,并将项目添加到列表中。这会导致AsyncTask
触发,将数据写入sqlite3数据库,然后刷新列表。
我最近将Android支持从2.3.3上升到4.0。我创建了一个新的4.0模拟器,出于某种原因,我的所有AsyncTask
似乎都排队,只有在用户离开屏幕时才会触发!
为什么会发生这种情况????
代码非常简单。我这里没有做任何有趣的事情。例如,这是一个AsyncTask
火灾示例:
Log log = data.mFoodLog;
log.setUserId(getUserId());
log.setDay(mBeginningOfToday.getTimeInMillis()/1000);
log.setStatus(DbDefinitions.STATE_POSTING);
(new SaveLogTask()).execute(new SaveObjectTaskParams(getApplicationContext(), log));
调试器显示正在执行的代码。我在doInBackground()
方法中有另一个断点,但是在我离开屏幕之前,该断点永远不会被击中。我还在这段代码中放了Log.e
个消息,并在没有调试器的情况下运行它,以确保调试器没有做任何奇怪的事情。在离开doInBackground()
之前,Activity
从不被解雇。
答案 0 :(得分:2)
要在不同的线程上执行它们,请使用:asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
答案 1 :(得分:1)
基本上AsyncTask
的行为自版本3.0
以来发生了变化。在2.3.3
它曾经同时执行AsyncTasks
,但现在它按顺序执行。
所以你的问题可能是你有一个AsyncTask
没有完成,而且由于这个原因,其他人甚至没有开始(如果没有看到更多的代码,很难说)。