我在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();几秒钟之后的方法除非用户关闭此应用程序,否则将在此之后调用此方法?有没有办法做到这一点?
答案 0 :(得分:3)
您可以使用Handler
和Runnable
组合在一段时间后执行语句。
您可以使用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();
}
}