2016-10-21 3 views
0

Ich habe einen Ortungsdienst in meiner App. Zu Debug-Zwecken möchte ich einige Ereignisse (wie "neue Koordinate", "Service onDestroy", "Service onStartCommand", "an das Backend gesendete Koordinate" usw.) in eine Textdatei schreiben. Aber ich bin mit einem Problem konfrontiert. Die Protokolldatei bekommt 350+ neue Zeilen pro Tag .. also .. in 3 Tagen habe ich eine Datei mit 1000 Zeilen.
Meine Idee ist es, nur die 3 (oder N in diesem Fall) letzten Tage zu behalten und den Inhalt zu löschen, der vor 3+ Tagen geschrieben wurde.Pflegen Sie 3 Tage Log - Android

Aber:

  • Ich möchte nicht in jeder überprüfen zu schreiben, wenn es alte Leitungen entfernt werden
  • Ich will nicht einen Alarm einstellen, dass alle 3 Tage feuert die löschen alte Daten.

Können Sie mir bitte sagen, wenn Sie einen anderen effizienten Weg kennen, um mit dieser Situation umzugehen?

Antwort

2

Ohne eine Möglichkeit, in die Textdatei zu indizieren, gibt es wirklich keine Möglichkeit, sie zu lösen, ohne jede Zeile der Datei (bis zu einem bestimmten Punkt) zu lesen, zu analysieren und das Datum zu finden.

Bewahren Sie keine Datei auf. Verwalte eine Datenbank. Lassen Sie eine der Spalten "created time" sein. Dann können Sie die Zeilen mit einer erstellten Zeit, die älter als ein Schwellenwert ist, problemlos löschen.

getContentResolver().delete(
     yourUri, 
     "created_time < ?", 
     new String[] { System.currentTimeIllis() - Integer.toString(TimeUnit.DAYS.toMillis(3) 
    ); 

(Oder etwas, geben Sie bitte Ihre eigene SQL testen ...)

Als Randnotiz, eine 1.000 Linientextdatei ist nichts. Lesen und analysieren ist nicht wichtig, es sei denn, Sie tun es oft. Wenn Sie die Datei 1x pro Tag lesen und schneiden, kein Problem.

Eine andere Lösung wäre, die Dateien zu rotieren (log -> log.1, log.1 -> log.2, ..., log.n-1 ---> log.n). Dies setzt natürlich keine feste Grenze für die Größe einer bestimmten Datei.

+0

wow, der effizienteste und einfachste Weg! Danke Jeffrey! :) – mapo

Verwandte Themen