我正在尝试创建一个在给定时间间隔内运行的服务。该服务的目的是更新数据库,并在完成后使用Intent通知Activity。
当用户选择“刷新”时,服务也应该可以从活动中调用。
我已经做到了这一点,但我不能让它在分离的线程中运行。
该服务执行Runnable中的update方法:
private Runnable refresh = new Runnable() {
public void run() {
update(); //Runs updates
didUpdate(); //Sends broadcast
handler.postDelayed(this, 50000); // 50 seconds, calls itself in 50 secs
}
};我还有一个名为ManualRefresh的runnable,它是通过activity中的广播调用的。
然而,这些runnables似乎阻塞了UI。
需要建议!:)
发布于 2011-09-20 04:41:50
当您通过调用Runnable的run方法来运行Runnable时,它将在当前线程上运行。要在后台线程上运行,您需要使用new Thread(refresh).start(); (如果您希望运行的Runnable是refresh)。
您也可以使用AsyncTask来实现这一点,但这更适合于活动而不是服务。有关使用AsyncTask的信息可以在API docs和文章Painless Threading中找到。
发布于 2011-09-20 04:55:42
我建议使用AlarmManager编写服务。服务将收到通知它定期更新数据库的意图。
更新后,您可以使用意图通知活动(如您所提到的)。
当用户想要手动刷新时,让应用程序向您的服务发送意图。从AlarmManager或从活动接收意图将执行相同的代码。
您可能还希望在请求手动刷新后重新安排警报。
https://stackoverflow.com/questions/7476969
复制相似问题