调度我的AsyncTask

时间:2014-11-27 17:23:45

标签: android android-asynctask

我之前可以看到这个问题,但我仍然在努力寻找答案。

我有一个执行AsyncTask的按钮。 AsyncTask有一个在doInBackground中运行的循环,从服务器获取一些数据。

这一切都很好用,但只有在此刻按下按钮时才有效。我希望在按下按钮后每小时运行一次,直到用户按下第二个按钮停止该过程。

有人可以帮我解决每小时执行AsyncTask的问题吗?

我试图使用广播接收器,但这不起作用,我读到这也不是一个好主意。

1 个答案:

答案 0 :(得分:3)

  

AsyncTask有一个在doInBackground中运行的循环,从服务器获取一些数据。

doInBackground()中的循环不适合AsyncTaskAsyncTask用于"事务性"各种工作,因此AsyncTask的线程可以及时返回到线程池。如果您希望Thread运行更长时间,请使用可能由Thread管理的Service

  

我想让它在按下按钮后每小时运行一次,直到用户按下第二个按钮停止该过程。

使用AlarmManager设置每小时的时间表。请考虑使用不精确的警报来降低此项工作的电池成本。如果您使用_WAKEUP式警报(例如,ELAPSED_REALTIME_WAKEUP),则需要使用WakefulBroadcastReceiverIntentService进行工作,移动doInBackground() AsyncTask的{​​{1}}到onHandleIntent()的逻辑。

This sample project演示了该过程,但在这种情况下,事件是在首次运行应用程序和重新启动时设置的。在您的情况下,您可以安排事件并在按下按钮时取消事件。