Android TimerTask只运行一次,但有时会更频繁

时间:2012-11-08 17:40:05

标签: android service timer timertask

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);
        }
    }

谁能告诉我计时器有什么问题?

由于

1 个答案:

答案 0 :(得分:0)

很可能是因为你在onStartCommand上返回默认值:

return super.onStartCommand(intent, flags, startId);

应替换为:

return START_STICKY;

这使得服务继续运行,直到它被明确停止,因此您必须在其他地方手动停止它,不要让它永远运行。