Android中的TimerTask大部分时间只运行一次,有时会更频繁地启动并停止运行。
基本上我想要一个应用程序来跟踪设备的传感器数据。
我有一个MainActivity和2个用于感知和记录的服务。
这是记录部分:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if (!started) {
started = true;
}
logfile = new File(Environment.getExternalStorageDirectory() + File.separator + "log.csv");
if (!logfile.exists()) {
try {
logfile.createNewFile();
//FileWriter fw = new FileWriter(logfile, true);
//fw.write("Modell;GPS-Zeit[Millis];Lat;Lon;Alt;Speed;AccX;AccY;AccZ;LinAccX;LinAccY;LinAccZ\n");
//fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
myTimer = new Timer();
myTimer.schedule(pingTimerTask, 1000, 1000);
myTimer.schedule(logTimerTask, 500,500);
Toast.makeText(this, "LogService started", Toast.LENGTH_SHORT).show();
Log.i(T, "LogService started");
return super.onStartCommand(intent, flags, startId);
}
这里是TimerTask:
TimerTask logTimerTask = new TimerTask() {
@Override
public void run() {
try {
logData();
} catch (Exception e) {
e.printStackTrace();
}
}
};
logdata()
private void logData() {
currentMsg = createMsg();
try {
FileWriter fw = new FileWriter(logfile, true);
fw.write(currentMsg + "\n");
fw.close();
} catch (Exception e) {
e.printStackTrace();
}
logSize+=currentMsg.length();
for (Listener l : listener) {
l.logged(logfile.toString(), logSize);
}
}
谁能告诉我计时器有什么问题?
由于
答案 0 :(得分:0)
很可能是因为你在onStartCommand上返回默认值:
return super.onStartCommand(intent, flags, startId);
应替换为:
return START_STICKY;
这使得服务继续运行,直到它被明确停止,因此您必须在其他地方手动停止它,不要让它永远运行。