我使用了一个自定义线程通过使线程进入睡眠,每1秒在后台获取数据,但我的应用程序崩溃并抛出异常OutOfMemoryError. 现在我读了android开发人员的文档,我明白使用自定义线程是不好的做法,因为很难管理内存一致性。但是最后我找到了ExecutorService当我们需要在后台做一些任务时非常有趣,所以,我决定使用它。
正如你所知,ExecutorService是这样的:
public void executeTask()
{
ExecutorService executroService = new Executor.newSingleThreadExecutor();
executroService.execute(new Runnable()
{
@Override
publi void run()
{
// now execute the server request
}
});
}
现在我怎么能实现调用executorService每1秒,直到用户去onpause()状态或直到用户从当前活动转移到另一个活动?如果我使用自定义线程来调用该服务,应用程序就会崩溃。那么我怎么才能做到呢?
您需要的是ScheduledExecutorService
它可以安排命令在给定的延迟后运行,或者定期执行。
下面是实现这个 的代码import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
Runnable beeper = () -> System.out.println("beep");
ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
Runnable canceller = () -> beeperHandle.cancel(false);
scheduler.schedule(canceller, 1, HOURS);
}
}