使用后台服务更新UI

时间:2015-06-11 12:18:14

标签: android android-activity android-service android-adapter

我已宣布服务类:

0

现在我想每10分钟(例如)当活动在后台时执行此服务,但我希望当活动回到前台时,MyFragment的listView使用服务中声明的适配器。 你能帮我么?我不知道如何做到这一点。

4 个答案:

答案 0 :(得分:1)

  

如果必须在10分钟的间隔内准确执行服务。   您可以将线程调度程序用作:

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 :(得分:0)

我的建议是使用数据库:

运行此后台任务后,将数据更新到数据库中。打开UI后,您可以从数据库中读取值,也可以更新UI。

答案 2 :(得分:0)

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

因此,服务不能(不应该)直接与活动对话,特别是如果活动被杀死/重新创建。

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

答案 3 :(得分:0)

您可以使用Timer Task在特定时间段后执行某项任务

1您需要创建TimerTask的子类

例如

class Mytask extends Timertask{
 @Override
public void run() {

    Handler handler = new Handler(Looper.getMainLooper());
    handler.post(new Runnable() {
             //your code you want to run in UI thread
         });
     }
}

2从您的服务开始此任务

                Timer timer = new Timer();
                MyTask task= new MyTask(getApplicationContext());
                timer.scheduleAtFixedRate(task,1,1000*60*10); // for 10 min

希望这是你想要的