首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android后台线程服务

Android后台线程服务
EN

Stack Overflow用户
提问于 2011-09-20 04:31:41
回答 2查看 3.5K关注 0票数 0

我正在尝试创建一个在给定时间间隔内运行的服务。该服务的目的是更新数据库,并在完成后使用Intent通知Activity

当用户选择“刷新”时,服务也应该可以从活动中调用。

我已经做到了这一点,但我不能让它在分离的线程中运行。

该服务执行Runnable中的update方法:

代码语言:javascript
复制
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。

需要建议!:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-20 04:41:50

当您通过调用Runnable的run方法来运行Runnable时,它将在当前线程上运行。要在后台线程上运行,您需要使用new Thread(refresh).start(); (如果您希望运行的Runnable是refresh)。

您也可以使用AsyncTask来实现这一点,但这更适合于活动而不是服务。有关使用AsyncTask的信息可以在API docs和文章Painless Threading中找到。

票数 2
EN

Stack Overflow用户

发布于 2011-09-20 04:55:42

我建议使用AlarmManager编写服务。服务将收到通知它定期更新数据库的意图。

更新后,您可以使用意图通知活动(如您所提到的)。

当用户想要手动刷新时,让应用程序向您的服务发送意图。从AlarmManager或从活动接收意图将执行相同的代码。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7476969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档