java定时任务,每天定时执行任务
java定时任务,每天定时执行任务。以下是这个例子的全部代码。
查看源码打印?
01 public class TimerManager {
02
03 //时间间隔
04 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
05
06 public TimerManager() {
07 Calendar calendar = Calendar.getInstance();
08
09 /*** 定制每日2:00执行方法 ***/
10
11 calendar.set(Calendar.HOUR_OF_DAY, 2);
12 calendar.set(Calendar.MINUTE, 0);
13 calendar.set(Calendar.SECOND, 0);
14
15 Date date=calendar.getTime(); //第一次执行定时任务的时间
16
17 //如果第一次执行定时任务的时间 小于 当前的时间
18 //此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
19 if (date.before(new Date())) {
20 date = this.addDay(date, 1);
21 }
22
23 Timer timer = new Timer();
24
25 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
26 //安排指定的任务在指定的时间开始进行重复的固定延迟执行。
27 timer.schedule(task,date,PERIOD_DAY);
28 }
29
30 // 增加或减少天数
31 public Date addDay(Date date, int num) {
32 Calendar startDT = Calendar.getInstance();
33 startDT.setTime(date);
34 startDT.add(Calendar.DAY_OF_MONTH, num);
35 return startDT.getTime();
36 }
37
38 }
在 TimerManager 这个类里面,大家一定要注意 时间点的问题。如果你设定在凌晨2点执行任务。但你是在2点以后
发布的程序或是重启过服务,那这样的情况下,任务会立即执行,而不是等到第二天的凌晨2点执行。为了,避免这种情况
发生,只能判断一下,如果发布或重启服务的时间晚于定时执行任务的时间,就在此基础上加一天。
查看源码打印?
01 public class NFDFlightDataTimerTask extends TimerTask {
02
03 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
04
05 @Override
06 public void run() {
07 try {
08 //在这里写你要执行的内容
09
10 } catch (Exception e) {
11 log.info("-------------解析信息发生异常--------------");
12 }
13 }
14 }
15
16 public class NFDFlightDataTaskListener implements ServletContextListener {
17
18 public void contextInitialized(ServletContextEvent event) {
19 new TimerManager();
20 }
21
22 public void contextDestroyed(ServletContextEvent event) {
23 }
24
25 }
然后要在web.xml里面配置监听器
查看源码打印?
1 <listener>
2 <listener-class>
3 com.listener.NFDFlightDataTaskListener
4 </listener-class>
5 </listener>
http://aokunsang.iteye.com/blog/1119075
最近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的。我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置。 经过2天研究和咨询,找到了,在此备忘一下。
注意:定位使用真机才能够真正定位;模拟器的话,在DDMS中的Emulator Control中,选择Manual,下面单选按钮选择Decimal,然后填写经纬度,send后,再点击定位我的位置按钮,就能定位了(这应该算是固定定位,哈哈。。。)、
1、第一步当然是获取一个针对自己项目的key值。http://dev.baidu.com/wiki/static/imap/key/
2、使用百度API是有前提的,摘自百度:首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,确定后返回,这样您就可以在您的程序中使用API了。(这两个文件见附件)。
3、按照自己的需求写一个layout,我的如下:
<?xml version="1.0" encoding="utf-8"?>
需要特别注意的是:<com.baidu.mapapi.MapView /> 这玩意。
4、写一个MapApplication实现application,提供全局的BMapManager,以及其初始化。
6、还有一种就是百度示例相当推荐的,也是加载定位位置速度比较快的,那就是通过定位监听器来定位信息。没啥难的,照着百度的示例写,都能搞定。
- baidu.rar (583.6 KB)
- 下载次数: 318
内容纲要
• ListView视图缓存优化
• ListView异步加载优化
• ListView图片缓存
• 内存优化
内存优化
• 方法1 : 等比例缩小图片
BitmapFactory.Options options = new
BitmapFactory.Options();
options.inSampleSize = 4;
•
方法2 : 对图片采用软引用,及时地进行recyle ()操作
SoftReference<Bitmap> bitmap;
bitmap = new
SoftReference<Bitmap>(pBitmap);
if(bitmap != null){
if(bitmap.get () != null &&
!bitmap.get ().isRecycled()){
bitmap.get ().recycle();
bitmap = null;
}
}
• 方法3 : 在页面切换时尽可能少地重复使用一些代码,比如
:重复调用数据库,反复使用某些对象等等......
方法4 :Android堆内存也可自己定义大小 和 优化Dalvik虚
拟机的堆内存分配
• 注意若使用这种方法:project build target 只能选择
<= 2.2 版本,否则编译将通不过。 所以不建议用这种方式
private final static int CWJ_HEAP_SIZE=
6*1024*1024;
private final static float
TARGET_HEAP_UTILIZATION = 0.75f;
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEA
P_SIZE);
VMRuntime.getRuntime().setTargetHeapUtilization(T
ARGET_HEAP_UTILIZATION);
• 优化Dalvik虚拟机的堆内存分配
对于Android平台来说,其托管层使用的Dalvik Java VM从目
前的表现来看还有很多地方可以优化处理,比如我们在开发
一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,
使用 dalvik.system.VMRuntime类提供的
setTargetHeapUtilization方法可以增强程序堆内存的处理
效率。当然具体原理我们可以参考开源工程,这里我们仅说
下使用方法 : private final static float
TARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可
以调用
VMRuntime.getRuntime().setTargetHeapUtilization(TARGE
T_HEAP_UTILIZATION); 即可。
• Android堆内存也可自己定义大小
对于一些Android项目,影响性能瓶颈的主要是Android
自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对
于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化
Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软
件的对内存大小,我们使用Dalvik提供的
dalvik.system.VMRuntime类来设置最小堆内存为例:
• private final static int CWJ_HEAP_SIZE = 6* 1024*
1024 ;
VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SI
ZE); //设置最小heap内存为6MB大小。
• 当然对于内存吃紧来说还可以通过手动干涉GC去处理