我已宣布服务类:
0
现在我想每10分钟(例如)当活动在后台时执行此服务,但我希望当活动回到前台时,MyFragment的listView使用服务中声明的适配器。 你能帮我么?我不知道如何做到这一点。
答案 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
希望这是你想要的