按钮每5秒触发一次

时间:2016-09-29 05:29:01

标签: android

我的应用程序需要实时跟踪,因此我需要一个需要每5秒触发一次的按钮,但我不知道该怎么做。你能教我怎么样?

我希望每隔5秒触发一次AsyncTask

btnStart.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        HashMap postLoc = new HashMap();
        postLoc.put("txtLat", tvLat.getText().toString());
        postLoc.put("txtLng", tvLong.getText().toString());
        postLoc.put("txtOwner", pref.getString("username","").toString());

        PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false,  new AsyncResponse() {
            @Override
            public void processFinish(String s) {
                Log.d(TAG, tvLat.getText().toString());
                Log.d(TAG, tvLong.getText().toString());
                Intent i = new Intent(getActivity(),GPS_Service.class);
                getActivity().startService(i);
            }
        });

        taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
    }
});

4 个答案:

答案 0 :(得分:1)

我认为此代码可能每隔5秒触发一次代码

 Timer timer;
TimerTask timerTask;
final Handler handler = new Handler();
 @Override
public void onCreate() {
    super.onCreate();             
    startTimer();
}

public void startTimer() {
    //set a new Timer
    timer = new Timer();

    //initialize the TimerTask's job
    initializeTimerTask();

    timer.schedule(timerTask, 0, 5000); 
}

public void initializeTimerTask() {
    timerTask = new TimerTask() {
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                   //code to run after every 5 seconds
                }
            });
        }
    };
}

答案 1 :(得分:0)

创建一个这样的方法并在按钮单击时调用方法,并使用这样的处理程序调用该方法:

mRunnable = new Runnable() {
        public void run() {
          public void toBecalled_Every_5_Second();
          mHandler.postDelayed(mRunnable, 5000);
        }
    };
 mHandler.postDelayed(mRunnable, 5000);


public void toBecalled_Every_5_Second(){
PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false,  new AsyncResponse() {
                @Override
                public void processFinish(String s) {
                    Log.d(TAG, tvLat.getText().toString());
                    Log.d(TAG, tvLong.getText().toString());
                    Intent i = new Intent(getActivity(),GPS_Service.class);
                    getActivity().startService(i);
                }
            });
                taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
}

因此它将每隔5秒调用一次方法,同步任务将执行....

答案 2 :(得分:0)

我希望有一个CountDownTimer,它会在每5秒钟后触发按钮点击功能。

CountDownTimer mTimer = new CountDownTimer(50000, 1000) {

    public void onTick(long millisUntilFinished) {
        // Do nothing
    }

    public void onFinish() {
        btnStart.performClick();
        this.start();  // Restart
    }
}.start();

答案 3 :(得分:0)

您可以将计时器 TimerTask 处理程序一起使用,将结果更新为主线程,即您的用户界面。

这样的事情:

Timer timer;
TimerTask timerTask;
//we are going to use a handler to be able to run in our TimerTask
final Handler handler = new Handler();

private void initializeTimerTask() {
  timerTask = new TimerTask() {
    public void run() {
      //use a handler to run process
      handler.post(new Runnable() {
        public void run() {
            /**************************/
            /** Do your process here **/
            /**************************/
        }
      });
    }
  };
}

private void startTimer() {
  //set a new Timer
  timer = new Timer();
  //initialize the TimerTask's job
  initializeTimerTask();
  //schedule the timer, start run TimerTask then run every 5000ms i.e 5 seconds.
  timer.schedule(timerTask, 0, 5000); //
}

private void stopTimerTask() {
  //stop the timer, if it's not already null
  if (timer != null) {
    timer.cancel();
    timer = null;
  }
}

Handler.post()中插入处理代码。然后通过调用startTimer()启动触发器。要停止触发,只需拨打stopTimerTask()