首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用后台服务更新UI

使用后台服务更新UI
EN

Stack Overflow用户
提问于 2015-06-11 20:18:14
回答 4查看 1.8K关注 0票数 0

我声明了一个Service类:

代码语言:javascript
运行
复制
public class MyService extends Service{
 @Nullable
 @Override
 public IBinder onBind(Intent intent) {
     return null;
 }

 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
     new Parsing().execute();
     return Service.START_STICKY;
}

private class Parsing extends AsyncTask<Void, Void, Void> {
    List<MyObject> myList = null;
    MyAdapter adapter = null;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        myList = new ArrayList<MyObject>();
    }

    @Override
    protected Void doInBackground(Void... params) {
        while (downloadDataFromInternet)
            myList.add(new MyObject(par1, par2, par3, par4));
    }

    @Override
    protected void onPostExecute(Void result) {
        if (myList.size() > 0) 
            adapter = new MyAdapter(this, myList);
    }
}
}

现在,我希望每10分钟(例如)在activity处于后台时执行一次此服务,但我希望当activity返回到前台时,MyFragment的listView将使用服务中声明的适配器。你能帮帮我吗?我不知道该怎么做。

EN

回答 4

Stack Overflow用户

发布于 2015-06-11 20:37:26

如果必须在10分钟间隔内准确执行服务,则返回

。您可以使用线程调度程序,如下所示:

代码语言:javascript
运行
复制
private final ScheduledExecutorService scheduler =
    Executors.newScheduledThreadPool(1);



@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    //schedule a thread
    scheduler.schedule(new Runnable() {
        public void run() { 
            startservice();
        }
    }, 10, TimeUnit.MINUTES);

    return Service.START_STICKY;
}

private startService(){
    // you background service related work

    while (downloadDataFromInternet)
        myList.add(new MyObject(par1, par2, par3, par4));

    // schedule a new thread
    scheduler.schedule(new Runnable() {
        public void run() { 
            startservice();
        }
    }, 10, TimeUnit.MINUTES);
}
票数 1
EN

Stack Overflow用户

发布于 2015-06-11 20:22:02

我的建议是使用数据库:

一旦此后台任务运行,然后将数据更新到数据库中。一旦你打开你的UI,然后你就可以从数据库中读取值,你也可以更新UI。

票数 0
EN

Stack Overflow用户

发布于 2015-06-11 20:22:44

听起来您想要在Service和Activity之间进行通信。虽然服务类似于独立于特定上下文,但活动不是。

因此,服务不能(不应该)直接与活动对话,特别是在活动被终止/重新创建的情况下。

您应该做的是开发一种通过使用数据库或SharedPreferences进行交互的方法,以便在服务中存储数据。然后,该活动将获取此数据并使用它。

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

https://stackoverflow.com/questions/30780582

复制
相关文章

相似问题

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