Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TimerTask只运行一次,但有时会更频繁一些_Android_Service_Timer_Timertask - Fatal编程技术网

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

Android TimerTask只运行一次,但有时会更频繁一些,android,service,timer,timertask,Android,Service,Timer,Timertask,我在Android中的TimerTask大部分时间只运行一次,有时启动频率稍高,然后停止 基本上我想要一个应用程序来跟踪设备的传感器数据 我有一个主要活动和两个传感器和日志服务 以下是日志部分: @Override public int onStartCommand(Intent intent, int flags, int startId) { if (!started) { started = true; } logfile = new File(En

我在Android中的TimerTask大部分时间只运行一次,有时启动频率稍高,然后停止

基本上我想要一个应用程序来跟踪设备的传感器数据

我有一个主要活动和两个传感器和日志服务

以下是日志部分:

@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 logTimerTask = new TimerTask() {
    @Override
    public void run() {
        try {
            logData();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
};
日志数据()

谁能告诉我计时器出了什么问题吗


谢谢

很可能是因为您在onstart命令上返回了默认值:

return super.onStartCommand(intent, flags, startId);
应替换为:

return START_STICKY;

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

听起来不错,我刚刚尝试过,但日志文件中仍然只有一个条目:-(使用处理程序解决了它:public void run(){/*执行您需要执行的操作/尝试{sendData();}catch(异常e){//TODO自动生成的catch块e.printStackTrace();}/下面是“技巧”*/handler.postDelayed(this,500);}……….handler.postDelayed(logTimerTask,500);
return START_STICKY;