异步任务

java 定时任务

帅比萌擦擦* 提交于 2021-01-16 07:42:25
private ScheduledExecutorService scheduledExecutorService; scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); scheduledExecutorService.scheduleAtFixedRate(new Task(), 1, 4, TimeUnit.SECONDS);//4s一次 延迟1s task执行的一步任务 scheduledExecutorService.shutdown();//停止任务 new task 实现 runable接口; Timer 存在一些缺陷: 1 , Timer 对调度的支持是基于绝对时间 , 而不是相对时间的,由此任务对系统时钟的改变是敏感的 ;ScheduledThreadExecutor 只支持相对时间。 2 ,如果 TimerTask 抛出未检查的异常, Timer 将会产生无法预料的行为。 Timer 线程并不捕获异常,所以 TimerTask 抛出的未检查的异常会终止 timer 线程。此时,已经被安排但尚未执行的 TimerTask 永远不会再执行了,新的任务也不能被调度了。 来源: oschina 链接: https://my.oschina.net/u/1538508/blog

Android异步任务(AsyncTask)的设计思想

自作多情 提交于 2020-03-23 02:10:51
3 月,跳不动了?>>> AsyncTask在Android十分常用,那为什么如此常用呢,不用行不行呢,内部又是怎么实现的呢,为什么Java的API中没有这个类呢,看完本文后,你将会知道答案。 这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),但是本文一定可以帮助你理解AsyncTask,也可能有一些你以前没有发现的内容。 大家都知道,Android的主线程(又叫UI线程,线程ID为1)有一些限制策略,使得主线程有些事做不了,比如访问网络就不允许,否则就是报,但在2.3之后的版本,你可以通过添加以下代码更改其限制策略,从而强制使得主线程可以访问网络: if (android.os.Build.VERSION.SDK_INT > 9) { StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } 不过StrictMode是一个开发工具主要用于侦测主线程中的磁盘和网络访问,而不是让你做这“坏”事,其实Android这样限制是有好处的,强制让开发者重视用户体验,一个反面例子是Windows