我正在研究React Native,我想创建一个永无止境的服务,在Native Modules上每(n)秒运行一次(关于这个主题是android)。
我创建了这样的简单服务
public void startTimer() {
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
Log.v(TAG, "SERVICE RUN");
try{
if(haveNetworkConnection()){
db.openDB();
if(db.countRowNewStructure()>0){
//send data to server
} else{
Log.v(TAG, "No data should be send to server");
}
} else {
Log.v(TAG, "Ga ada sinyal");
}
} catch (JSONException e){
e.printStackTrace();
}
}
}, 0, 1000);
}
上面的代码每秒运行一次进行检查,但是当我从 React Native 重新运行服务时,我遇到了问题,日志每 0.5 秒向我显示一次这些代码
模拟可能是这样的:
0----------------1 //seconds
startTimer()
re-run startTimer() conscious
0----------------1 //seconds
startTimer()
//now i have two startTimer() that will run every 1 sec on different interval
我想让我的 startTimer() 只运行一次,即使我每 0.5 秒触发一次startService()
。
我该怎么做?可能吗?
这可能会对您有所帮助。 在特定时间后在安卓中执行特定动作的计时器。
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask timertaskforsynctime = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
@Override
public void run() {
// your action here
}
});
}
};
timer.schedule(timertaskforsynctime,5000,10000);// decide the time when it will start and after how much time it will run continusly.
}`
一次
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
// your code that will run after 1 sec
}
}, 1000);
您可以使用
cancel
方法来取消之前的Timer
。
public class YourModule extends ReactContextBaseJavaModule {
Timer tim = new Timer();
public void startTimer() {
tim.cancel();
tim = new Timer();
tim.scheduleAtFixedRate(
new TimerTask() {
public void run() {
// Run tasks
}
},
0,
1000);
}
}