后台线程中的Android服务

时间:2011-09-19 20:31:41

标签: android android-service

我正在尝试创建一个在给定时间间隔内运行的服务。该服务的目的是更新数据库,完成后通过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。

需要建议! :)

2 个答案:

答案 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将执行相同的代码。

您可能还希望在请求手动刷新后重新安排闹钟。