当前位置:  编程技术>移动开发
本页文章导读:
    ▪java定时任务,每日定时执行任务        java定时任务,每天定时执行任务 java定时任务,每天定时执行任务java定时任务,每天定时执行任务。以下是这个例子的全部代码。查看源码打印?01 public class TimerManager {  02    03  //时间.........
    ▪ 百度舆图的手动定位和自动定位[转]        百度地图的手动定位和自动定位[转]   http://aokunsang.iteye.com/blog/1119075   最近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的。我想实现一种效果.........
    ▪ ListView优化以内存优化       ListView优化之内存优化   内容纲要 • ListView视图缓存优化 • ListView异步加载优化 • ListView图片缓存 • 内存优化   内存优化 • 方法1 :  等比例缩小图片                     .........

[1]java定时任务,每日定时执行任务
    来源: 互联网  发布时间: 2014-02-18
java定时任务,每天定时执行任务
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>

    
[2] 百度舆图的手动定位和自动定位[转]
    来源: 互联网  发布时间: 2014-02-18
百度地图的手动定位和自动定位[转]

 

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"?>

Xml代码  
  • <LinearLayout  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:orientation="vertical"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent"  
  •   >  
  •     
  •   <TextView   
  •     android:id="@+id/myLocation_id"   
  •     android:layout_width="fill_parent"   
  •     android:layout_height="wrap_content"  
  •     android:textSize="15dp"  
  •     android:gravity="center_horizontal"  
  •     android:textColor="@drawable/black"  
  •     android:background="@drawable/gary"  
  •     />  
  •       
  •   <com.baidu.mapapi.MapView android:id="@+id/bmapsView"  
  •     android:layout_width="fill_parent" android:layout_height="fill_parent"   
  •     android:clickable="true"  android:layout_weight="1"     
  •    />  
  •     
  •   <Button   
  •       android:layout_width="wrap_content"   
  •       android:layout_height="wrap_content"   
  •       android:id="@+id/location_button_id"   
  •       android:text="@string/location_button_text"  
  •    />  
  •       
  • </LinearLayout>  
  •  需要特别注意的是:<com.baidu.mapapi.MapView  /> 这玩意。

     

     4、写一个MapApplication实现application,提供全局的BMapManager,以及其初始化。

     

    Java代码  
  • public BMapManager mapManager = null;  
  • static MapApplication app;  
  • public String mStrKey = "你申请的key值";  
  •   
  • @Override  
  • public void onCreate() {  
  •     mapManager = new BMapManager(this);  
  •     mapManager.init(mStrKey, new MyGeneralListener());  
  • }  
  • @Override  
  • //建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗  
  • public void onTerminate() {  
  •     // TODO Auto-generated method stub  
  •     if(mapManager != null)  
  •     {  
  •         mapManager.destroy();  
  •         mapManager = null;  
  •     }  
  •     super.onTerminate();  
  • }  
  •   
  •  static class MyGeneralListener implements MKGeneralListener{  
  •   
  •     @Override  
  •     public void onGetNetworkState(int arg0) {  
  •         Toast.makeText(MapApplication.app.getApplicationContext(), "您的网络出错啦!",  
  •                 Toast.LENGTH_LONG).show();  
  •     }  
  •     @Override  
  •     public void onGetPermissionState(int iError) {  
  •         if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {  
  •             // 授权Key错误:  
  •             Toast.makeText(MapApplication.app.getApplicationContext(),"您的授权Key不正确!",  
  •                     Toast.LENGTH_LONG).show();  
  •         }  
  •     }  
  • }  
  • 5、接下来就是按照百度api写定位代码了,使用handler机制去添加定位图层,需要说明的都在注释上了。  
  •   
  •        private BMapManager mBMapMan = null;  
  • private MapView mMapView = null;  
  • private MapController bMapController;  
  • private MKLocationManager mkLocationManager;  
  • private MKSearch mkSearch;  
  •   
  • private TextView address_view;   //定位到的位置信息  
  •   
  • private ProgressDialog dialog;  
  • private List<HotelInfo> hotelList;  
  •   
  • private int distance = 1000;  //查询的范围(单位:m)  
  •   
  •    Handler handler = new Handler(){  
  •     @Override  
  •     public void handleMessage(Message msg) {  
  •           
  •         double lat = msg.getData().getDouble("lat");  
  •         double lon = msg.getData().getDouble("lon");  
  •         if(lat!=0&&lon!=0){  
  •             GeoPoint point = new GeoPoint(  
  •                     (int) (lat * 1E6),  
  •                     (int) (lon * 1E6));  
  •             bMapController.animateTo(point);  //设置地图中心点  
  •             bMapController.setZoom(15);  
  •               
  •             mkSearch.reverseGeocode(point);   //解析地址(异步方法)  
  •               
  •             MyLocationOverlay myLoc = new MyLocationOverlayFromMap(ShowMapAct.this,mMapView);  
  •             myLoc.enableMyLocation();   // 启用定位  
  •             myLoc.enableCompass();      // 启用指南针  
  •             mMapView.getOverlays().add(myLoc);  
  •         }else{  
  •             Toast.makeText(ShowMapAct.this, "没有加载到您的位置", Toast.LENGTH_LONG).show();  
  •         }  
  •           
  •         if(hotelList!=null){  
  •             Drawable marker = getResources().getDrawable(R.drawable.iconmarka);  //设置marker  
  •             marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());   //为maker定义位置和边界  
  •             mMapView.getOverlays().add(new OverItemList(marker,hotelList,ShowMapAct.this,bMapController));  
  •         }else if(hotelList==null&&lat!=0&&lon!=0){  
  •             Toast.makeText(ShowMapAct.this, "网络异常,没有获取到酒店信息。", Toast.LENGTH_LONG).show();  
  •         }  
  •         if(dialog!=null)  dialog.dismiss();  
  •     }  
  •   };  
  •   
  • @Override  
  • protected void onCreate(Bundle savedInstanceState) {  
  •       
  •     distance = getIntent().getExtras().getInt("distance");   //获取查询范围  
  •       
  •     super.onCreate(savedInstanceState);  
  •     setContentView(R.layout.location);  
  •       
  •     mMapView = (MapView)findViewById(R.id.bmapsView);   //初始化一个mapView  存放Map  
  •     init();  //初始化地图管理器  
  •     super.initMapActivity(mBMapMan);  
  •       
  •       
  •     address_view = (TextView)findViewById(R.id.myLocation_id);  
  •     SpannableStringBuilder style = new SpannableStringBuilder(String.format(getResources().getString(R.string.location_text),"位置不详"));  
  •     style.setSpan(new ForegroundColorSpan(Color.RED), 5, style.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  •     address_view.setText(style);  
  •       
  •     Button location_button = (Button)findViewById(R.id.location_button_id);  
  •     location_button.setOnClickListener(new View.OnClickListener(){  
  •         @Override  
  •         public void onClick(View v) {  
  •              dialog = ProgressDialog.show(ShowMapAct.this, "", "数据加载中,请稍后.....");  
  •              new Thread(new MyThread()).start();  
  •         }  
  •     });  
  •       
  •     mkSearch = new MKSearch();   //初始化一个MKSearch,根据location解析详细地址  
  •     mkSearch.init(mBMapMan, this);  
  •        mMapView.setBuiltInZoomControls(true);   //启用内置的缩放控件  
  •        bMapController = mMapView.getController();  
  •        GeoPoint defaultPoint = new GeoPoint((int) (39.920934 * 1E6),(int) (116.412817 * 1E6));  //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)  
  •        bMapController.setCenter(defaultPoint);  //设置地图中心点  
  •        bMapController.setZoom(12);  //设置地图zoom级别  
  •          
  •        mkLocationManager = mBMapMan.getLocationManager();  
  • }  
  • /** 
  •  * 初始化地图管理器BMapManager 
  •  */  
  • public void init(){  
  •     MapApplication app = (MapApplication)getApplication();  
  •        if (app.mapManager == null) {  
  •         app.mapManager = new BMapManager(getApplication());  
  •         app.mapManager.init(app.mStrKey, new MapApplication.MyGeneralListener());  
  •        }  
  •        mBMapMan = app.mapManager;  
  • }  
  •   
  • @Override  
  • protected void onDestroy() {  
  •     MapApplication app = (MapApplication)getApplication();  
  •     if (mBMapMan != null) {  
  •         mBMapMan.destroy();  
  •         app.mapManager.destroy();  
  •         app.mapManager = null;  
  •         mBMapMan = null;  
  •     }  
  •     super.onDestroy();  
  • }  
  •   
  •    
  •    @Override    
  •    protected void onPause() {    
  •        if (mBMapMan != null) {    
  •            // 终止百度地图API    
  •         mBMapMan.stop();    
  •        }    
  •        super.onPause();    
  •    }  
  •    
  •    @Override    
  •    protected void onResume() {  
  •        if (mBMapMan != null) {    
  •            // 开启百度地图API    
  •         mBMapMan.start();    
  •        }    
  •        super.onResume();    
  •    }  
  •   
  • @Override  
  • protected boolean isRouteDisplayed() {  
  •     return false;  
  • }  
  •   
  • @Override  
  • public void onGetAddrResult(MKAddrInfo result, int iError) {  
  •     if(result==null) return;  
  •     SpannableStringBuilder style = new SpannableStringBuilder(String.format(getResources().getString(R.string.location_text),result.strAddr));  
  •     style.setSpan(new ForegroundColorSpan(Color.RED), 5, style.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
  •     address_view.setText(style);  
  •     if(dialog!=null) dialog.dismiss();  
  • }  
  •   
  • @Override  
  • public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {}  
  • @Override  
  • public void onGetPoiResult(MKPoiResult arg0, int arg1, int arg2) {}  
  • @Override  
  • public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {}  
  • @Override  
  • public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {}  
  •   
  • /** 
  •  * 重新定位,加载数据 
  •  * @author Administrator 
  •  * 
  •  */  
  • class MyThread implements Runnable{  
  •     @Override  
  •     public void run() {  
  •         /** 
  •           * 最重要的就是这个玩意 
  •           * 由于LocationListener获取第一个位置修正的时间会很长,为了避免用户等待, 
  •           * 在LocationListener获取第一个更精确的位置之前,应当使用getLocationInfo() 获取一个缓存的位置 
  •           */  
  •         Location location = mkLocationManager.getLocationInfo();  
  •         double lat = 0d,lon = 0d;  
  •         if(location!=null){   //定位到位置  
  •             String coordinate = location.getLatitude()+","+location.getLongitude();  
  •             HotelRemoteData hotelData = new HotelRemoteData();  
  •             /** 
  •              * 远程获取酒店列表数据 
  •              */  
  •             hotelList = hotelData.getHotelToMap(coordinate,distance);  
  •             lat = location.getLatitude();  
  •             lon = location.getLongitude();  
  •         }  
  •           
  •         Message msg = new Message();  
  •         Bundle data = new Bundle();  
  •         data.putDouble("lat", lat);  
  •         data.putDouble("lon", lon);  
  •         msg.setData(data);  
  •         handler.sendMessage(msg);  
  •     }  
  • }  
  •  

      6、还有一种就是百度示例相当推荐的,也是加载定位位置速度比较快的,那就是通过定位监听器来定位信息。没啥难的,照着百度的示例写,都能搞定。

     

    Java代码  
  • LocationListener listener = new LocationListener() {  
  •     @Override  
  •     /** 位置变化,百度地图即会调用该方法去获取位置信息。 
  •       * (我测试发现就算手机不动,它也会偶尔重新去加载位置;只要你通过重力感应,他就一定会重新加载) 
  •       */  
  •     public void onLocationChanged(Location location) {  
  •       GeoPoint gp =  new GeoPoint((int) (location.getLatitude() * 1E6), (int) (location.getLongitude() * 1E6));   //通过地图上的经纬度转换为地图上的坐标点  
  •       bMapController.animateTo(gp);  //动画般的移动到定位的位置  
  •     }  
  • };  
  •  

    • baidu.rar (583.6 KB)
    • 下载次数: 318

        
    [3] ListView优化以内存优化
        来源: 互联网  发布时间: 2014-02-18
    ListView优化之内存优化
      内容纲要



    • 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去处理



      

        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3