我声明了一个Service类:
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将使用服务中声明的适配器。你能帮帮我吗?我不知道该怎么做。
发布于 2015-06-11 20:37:26
如果必须在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);
}发布于 2015-06-11 20:22:02
我的建议是使用数据库:
一旦此后台任务运行,然后将数据更新到数据库中。一旦你打开你的UI,然后你就可以从数据库中读取值,你也可以更新UI。
发布于 2015-06-11 20:22:44
听起来您想要在Service和Activity之间进行通信。虽然服务类似于独立于特定上下文,但活动不是。
因此,服务不能(不应该)直接与活动对话,特别是在活动被终止/重新创建的情况下。
您应该做的是开发一种通过使用数据库或SharedPreferences进行交互的方法,以便在服务中存储数据。然后,该活动将获取此数据并使用它。
https://stackoverflow.com/questions/30780582
复制相似问题