我之前可以看到这个问题,但我仍然在努力寻找答案。
我有一个执行AsyncTask的按钮。 AsyncTask有一个在doInBackground中运行的循环,从服务器获取一些数据。
这一切都很好用,但只有在此刻按下按钮时才有效。我希望在按下按钮后每小时运行一次,直到用户按下第二个按钮停止该过程。
有人可以帮我解决每小时执行AsyncTask的问题吗?
我试图使用广播接收器,但这不起作用,我读到这也不是一个好主意。
答案 0 :(得分:3)
AsyncTask有一个在doInBackground中运行的循环,从服务器获取一些数据。
doInBackground()
中的循环不适合AsyncTask
。 AsyncTask
用于"事务性"各种工作,因此AsyncTask
的线程可以及时返回到线程池。如果您希望Thread
运行更长时间,请使用可能由Thread
管理的Service
。
我想让它在按下按钮后每小时运行一次,直到用户按下第二个按钮停止该过程。
使用AlarmManager
设置每小时的时间表。请考虑使用不精确的警报来降低此项工作的电池成本。如果您使用_WAKEUP
式警报(例如,ELAPSED_REALTIME_WAKEUP
),则需要使用WakefulBroadcastReceiver
和IntentService
进行工作,移动doInBackground()
AsyncTask
的{{1}}到onHandleIntent()
的逻辑。
This sample project演示了该过程,但在这种情况下,事件是在首次运行应用程序和重新启动时设置的。在您的情况下,您可以安排事件并在按下按钮时取消事件。