我正在尝试创建一个在给定时间间隔内运行的服务。该服务的目的是更新数据库,完成后通过Activity
通知Intent
。
当用户选择“刷新”时,也应该从活动中调用该服务。
我已经完成了这个,但我不能让它在分离的线程中运行。
该服务在Runnable中执行更新方法:
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,它通过活动的广播来调用。
然而,这些runnable似乎阻止了UI。
需要建议! :)
答案 0 :(得分:2)
当您通过调用它的run
方法运行Runnable时,它会在当前线程上运行。要在后台线程上运行,您需要使用new Thread(refresh).start();
(如果您要运行的Runnable为refresh
)。
您也可以使用AsyncTask,但这更适合于活动而不是服务。有关使用AsyncTask的信息,请参阅API docs和文章Painless Threading。
答案 1 :(得分:0)
我建议使用AlarmManager编写服务。该服务将收到一个Intent,告诉它定期更新数据库。
更新后,您可以使用Intent通知Activity(如您所述)。
当用户想要手动刷新时,让应用程序向您发送一个Intent服务。从AlarmManager或Activity中接收Intent将执行相同的代码。
您可能还希望在请求手动刷新后重新安排闹钟。