在android中经过一段时间后重新执行代码

时间:2012-03-12 11:37:06

标签: java android

我在google地图项目中,这是我在oncreate中的代码:

mapView = (MapView)findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);
        mapView.setSatellite(false);
        mapView.setStreetView(true);
        mapController = mapView.getController();
        mapController.setZoom(19);
        getLastLocation();
        drawCurrPositionOverlay();
        drawMalls();
        animateToCurrentLocation();

但现在我想调用这个DrawMalls();几秒钟之后的方法除非用户关闭此应用程序,否则将在此之后调用此方法?有没有办法做到这一点?

6 个答案:

答案 0 :(得分:3)

您可以使用HandlerRunnable组合在一段时间后执行语句。

您可以使用Handler的postDelayed()方法延迟Runnable。

Runnable mRunnable;
Handler mHandler=new Handler();

mRunnable=new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                 drawMalls();
                 //If you want to re call this method at a gap of x seconds then you can schedule  handler again
                  mHandler.postDelayed(mRunnable,2*1000);       
                }
            };
mHandler.postDelayed(mRunnable,10*1000);//Execute after 10 Seconds

如果您要取消此操作,则必须使用mHandler.removeCallbacks(mRunnable);之类的处理程序的removeCallback()方法

或者你可以使用Timer。您可以在此处引用示例http://thedevelopersinfo.wordpress.com/2009/10/18/scheduling-a-timer-task-to-run-repeatedly/

答案 1 :(得分:1)

您可以使用java.util.Timer的{​​{1}}方法安排schedule()的未来执行:

drawMalls()

我不确定Timer t = new Timer(); t.schedule( new TimerTask() { public void run() { System.out.println("hello\n"); } }, 2000); // Milliseconds: 2 * 1000 drawMalls()还是非静态方法。如果是static,则可以直接调用static方法。否则,您需要安排TimerTask.run()的{​​{1}}方法可用的类实例{/ 1}}:

drawMalls()

编辑:

要在每两秒钟后重复运行一次任务,您可以使用:

run()

答案 2 :(得分:1)

您可以按照使用ScheduledExecutorService here的说明进行操作之前我已经有过错误,而且在2.1上没有停止并正确启动计时器,但是我所说的调度方案对我来说非常合适。

答案 3 :(得分:1)

有两种方式

1)使用Handler 2)使用定时器

      //using Timer//
    public void OnCreate(Bundle SaveInstanceState())
    {
      ------------
      -----------------
      PreferedTime  pTime=new preferedTime();

      Timer t=new Timer(false);
      t.Schedule(pTime,2000);
   }


   class PreferedTime extends TimerTask
   {
      public void run()
      {
         drawMalls();
       }
   }




     //method 2//
     public void OnCreate(Bundle SaveInstanceState())
    {
      -----------------
      -----------------
     Handler handler=new handler(new Runnable()
     {
        public void run()
        {
            drawMalls();
         }
      },2000);

答案 4 :(得分:1)

MyCount counter;
@Override 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
 counter= new MyCount(60000,1000);
counter.start();
}    


public class MyCount extends CountDownTimer{
public MyCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
 counter= new MyCount(60000,1000);
}
@Override
public void onTick(long millisUntilFinished) {
    s1=millisUntilFinished/1000;
 if(s1%2==0)
{
drawMalls();

}


}
}

这个每2秒钟调用一次drawMalls()..我可以根据需要改变它..

答案 5 :(得分:0)

如果重新执行代码未绑定到应用程序状态,但仅限于时间段,请查看Timer

http://developer.android.com/reference/java/util/Timer.html

Timer timer;

function myCallerFunction(){
    timer = new Timer();
    timer.schedule(seconds * 1000); //must be in milliseconds
}

private class MyTask extends TimerTask {
    public void run() {
      drawMalls();
    }
}