在我离开活动之前,AsyncTasks不会触发

时间:2014-09-03 14:13:10

标签: android android-asynctask

我没有得到这个,这真让我感到沮丧。

我所有长时间运行的操作都发生在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 从不被解雇。

2 个答案:

答案 0 :(得分:2)

乍一看似乎是@Cliffroot所说的,一个异步任务没有结束并排队他们(由于Android中的行为变化)。

要在不同的线程上执行它们,请使用:asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);

答案 1 :(得分:1)

基本上AsyncTask的行为自版本3.0以来发生了变化。在2.3.3它曾经同时执行AsyncTasks,但现在它按顺序执行。 所以你的问题可能是你有一个AsyncTask没有完成,而且由于这个原因,其他人甚至没有开始(如果没有看到更多的代码,很难说)。