From: kazhik Date: Thu, 5 Nov 2009 12:41:29 +0000 (+0900) Subject: performance improved X-Git-Url: http://git.sourceforge.jp/view?p=tokyorunners%2Ftokyorunners.git;a=commitdiff_plain;h=5373fc80e31030e975bceea09239fda930afb7cf performance improved --- diff --git a/src/net/kazhik/android/tokyorunners/MapMode.java b/src/net/kazhik/android/tokyorunners/MapMode.java index 60d65e7..3246174 100755 --- a/src/net/kazhik/android/tokyorunners/MapMode.java +++ b/src/net/kazhik/android/tokyorunners/MapMode.java @@ -3,6 +3,7 @@ package net.kazhik.android.tokyorunners; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; import android.app.AlertDialog; @@ -12,7 +13,6 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; -import android.content.SharedPreferences; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; @@ -20,13 +20,10 @@ import android.graphics.Path; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.preference.PreferenceManager; +import android.os.Debug; import android.util.Log; import android.view.KeyEvent; -import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.view.View.OnLongClickListener; import android.widget.Toast; import com.google.android.maps.GeoPoint; @@ -46,6 +43,7 @@ public class MapMode extends MapActivity { private SplitPoints m_overlaySplitpoints; private GeoPoint m_prevPoint = null; private long m_startTime = 0; + private final SimpleDateFormat m_timeFormatter = new SimpleDateFormat("HH:mm:ss"); public class RunningRoute extends Overlay { @@ -165,7 +163,6 @@ public class MapMode extends MapActivity { @Override public void onResume() { - Log.d(this.getClass().getName(), "onResume()"); super.onResume(); IntentFilter filter = new IntentFilter(); filter.addAction("NewRunningRecord"); @@ -206,7 +203,9 @@ public class MapMode extends MapActivity { Drawable runner = getResources().getDrawable(R.drawable.runner); m_overlaySplitpoints = new SplitPoints(runner); + long time1 = System.currentTimeMillis(); drawOverlays(mapView); + Log.d(this.getClass().getName(), "drawOverlays() -- " + (System.currentTimeMillis() - time1)); } private void drawOverlays(MapView mapView) { @@ -220,9 +219,9 @@ public class MapMode extends MapActivity { m_overlaySplitpoints.clearItem(); - long recTime = 0; - Record rec; - while ((rec = TokyoRunners.getNextRecord(recTime)) != null) { + Iterator it = TokyoRunners.getRecordIterator(); + while (it.hasNext()) { + Record rec = it.next(); if (rec.hasLocation()) { GeoPoint gp = new GeoPoint(rec.getLatitudeE6(), rec .getLongitudeE6()); @@ -236,17 +235,15 @@ public class MapMode extends MapActivity { drawSplitPoint(gp, rec.getName(), rec.getDate()); } } - recTime = rec.getDate().getTime(); if (m_startTime == 0) { - m_startTime = recTime; + m_startTime = rec.getDate().getTime(); } } } private void drawSplitPoint(GeoPoint gp, String pointName, Date recDate) { - SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); - String snippet = pointName + "[" + formatter.format(recDate) + "]"; + String snippet = pointName + "[" + m_timeFormatter.format(recDate) + "]"; OverlayItem ovItem = new OverlayItem(gp, "", snippet); m_overlaySplitpoints.addSplitpoint(ovItem); if (m_overlaySplitpoints.size() == 1) { @@ -255,7 +252,6 @@ public class MapMode extends MapActivity { } public boolean onKeyDown(int keyCode, KeyEvent event) { - Log.d(this.getClass().getName(), "onKeyDown():" + keyCode); if (keyCode == KeyEvent.KEYCODE_BACK) { showDialog(Constants.DIALOG_EXIT_ID); return true; @@ -277,6 +273,7 @@ public class MapMode extends MapActivity { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Debug.stopMethodTracing(); finish(); } diff --git a/src/net/kazhik/android/tokyorunners/RunningHistory.java b/src/net/kazhik/android/tokyorunners/RunningHistory.java index 803e51a..cbde72b 100644 --- a/src/net/kazhik/android/tokyorunners/RunningHistory.java +++ b/src/net/kazhik/android/tokyorunners/RunningHistory.java @@ -7,15 +7,14 @@ import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; +import java.util.Formatter; import java.util.HashMap; -import java.util.Iterator; import android.app.ListActivity; import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.os.Environment; -import android.util.Log; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; @@ -27,7 +26,7 @@ import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; public class RunningHistory extends ListActivity implements OnItemClickListener { - private SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + private SimpleDateFormat m_startTimeFormatter = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); private HashMap m_startTimeMap = new HashMap(); private static final int MENU_DELETE_THIS = Menu.FIRST + 200; @@ -47,6 +46,7 @@ public class RunningHistory extends ListActivity implements OnItemClickListener // 履歴データを読み込む String[] columns = { RunningRecordProvider.START_TIME, + RunningRecordProvider.CURRENT_TIME, RunningRecordProvider.DISTANCE}; String sortOrder = RunningRecordProvider.CURRENT_TIME + " desc"; Cursor cursor = managedQuery(RunningRecordProvider.REC_URI, columns, null, null, sortOrder); @@ -56,11 +56,13 @@ public class RunningHistory extends ListActivity implements OnItemClickListener } ArrayList history = new ArrayList(); long startTime = 0; + long currentTime = 0; float distance = 0; long prevStartTime = 0; while (cursor.moveToNext()) { startTime = cursor.getLong(0); - distance = (float)cursor.getLong(1); + currentTime = cursor.getLong(1); + distance = (float)cursor.getLong(2); // Log.d(this.getClass().getName(), "startTime:" + startTime + "; distance:" + distance); if (startTime == prevStartTime) { @@ -75,6 +77,15 @@ public class RunningHistory extends ListActivity implements OnItemClickListener rowStr.append(" "); rowStr.append(distance / 1000); + rowStr.append("km"); // TODO: i18n + rowStr.append(" "); + + long finalTime = currentTime - startTime; + Formatter finalTimeFormatter = new Formatter(); + rowStr.append(finalTimeFormatter.format("%d:%02d:%02d", + finalTime / 1000 / 60 / 60, + finalTime / 1000 / 60 % 60, + finalTime / 1000 % 60)); history.add(rowStr.toString()); } ArrayAdapter historyArray = new ArrayAdapter(this, R.layout.runningrecord, history); @@ -124,14 +135,14 @@ public class RunningHistory extends ListActivity implements OnItemClickListener String[] splitStr = historyArray.getItem(position).split(" "); String dateStr = splitStr[0] + " " + splitStr[1]; long startTime = 0; - try { - startTime = m_startTimeFormatter.parse(dateStr).getTime(); - startTime = m_startTimeMap.get(startTime); - } catch (ParseException e) { - e.printStackTrace(); - } switch (item.getItemId()) { case MENU_DELETE_THIS: + try { + startTime = m_startTimeFormatter.parse(dateStr).getTime(); + startTime = m_startTimeMap.get(startTime); + } catch (ParseException e) { + e.printStackTrace(); + } String selection = RunningRecordProvider.START_TIME + " = ?"; String[] selectionArgs = { Long.toString(startTime) }; @@ -147,6 +158,12 @@ public class RunningHistory extends ListActivity implements OnItemClickListener historyArray.clear(); break; case MENU_SAVE_GPX: + try { + startTime = m_startTimeFormatter.parse(dateStr).getTime(); + startTime = m_startTimeMap.get(startTime); + } catch (ParseException e) { + e.printStackTrace(); + } saveRecordAsGpxFile(startTime); break; default: diff --git a/src/net/kazhik/android/tokyorunners/RunningRecord.java b/src/net/kazhik/android/tokyorunners/RunningRecord.java index 2912c60..4f83081 100755 --- a/src/net/kazhik/android/tokyorunners/RunningRecord.java +++ b/src/net/kazhik/android/tokyorunners/RunningRecord.java @@ -30,12 +30,14 @@ public class RunningRecord { m_contentResolver = contentResolver; } public String addRecord(Date date, Location loc, String pointName, boolean persistent) { + //Log.d(this.getClass().getName(), date.toLocaleString()); // これまでの走行距離を計算 if (m_prevLocation != null && loc != null) { float distance = m_prevLocation.distanceTo(loc); - Log.d(this.getClass().getName(), "distance: " + distance); +// Log.d(this.getClass().getName(), "distance: " + distance); m_distance += m_prevLocation.distanceTo(loc); - } else { + } + if (m_startTime == 0) { m_startTime = date.getTime(); } m_prevLocation = loc; @@ -100,6 +102,10 @@ public class RunningRecord { return null; } + public Iterator getIterator() { + return m_recordList.iterator(); + } + public Record getNextRecord(Date date) { Record rec = null; diff --git a/src/net/kazhik/android/tokyorunners/TokyoRunners.java b/src/net/kazhik/android/tokyorunners/TokyoRunners.java index 6f14d32..a031028 100755 --- a/src/net/kazhik/android/tokyorunners/TokyoRunners.java +++ b/src/net/kazhik/android/tokyorunners/TokyoRunners.java @@ -1,6 +1,7 @@ package net.kazhik.android.tokyorunners; import java.util.Date; +import java.util.Iterator; import android.app.AlertDialog; import android.app.Dialog; @@ -14,7 +15,10 @@ import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.location.LocationProvider; +import android.media.AudioManager; +import android.media.ToneGenerator; import android.os.Bundle; +import android.os.Debug; import android.os.SystemClock; import android.preference.PreferenceManager; import android.text.format.DateUtils; @@ -72,7 +76,7 @@ public class TokyoRunners extends TabActivity implements LocationListener { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); -// Debug.startMethodTracing("tokyorunners"); + Debug.startMethodTracing("tokyorunners"); setContentView(R.layout.stopwatch); @@ -246,12 +250,11 @@ public class TokyoRunners extends TabActivity implements LocationListener { @Override public void onDestroy() { + Log.d(this.getClass().getName(), "onDestroy():"); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); m_runningRecord = null; -// Debug.stopMethodTracing(); - if (m_useGPS) { m_locMgr.removeUpdates(this); } @@ -294,6 +297,7 @@ public class TokyoRunners extends TabActivity implements LocationListener { new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { + Debug.stopMethodTracing(); finish(); } @@ -344,6 +348,17 @@ public class TokyoRunners extends TabActivity implements LocationListener { return; } + // 音声出力でスタートを知らせる + Location prevLocation = m_runningRecord.getPrevLocation(); + if (prevLocation == null) { + ToneGenerator toneGenerator = new ToneGenerator( + AudioManager.STREAM_SYSTEM, + ToneGenerator.MAX_VOLUME); + toneGenerator.startTone(ToneGenerator.TONE_PROP_BEEP); + toneGenerator.stopTone(); + } + + // 精度が低いデータは無視 // 移動距離が精度より小さい場合も無視 if (location.hasAccuracy()) { @@ -351,7 +366,6 @@ public class TokyoRunners extends TabActivity implements LocationListener { ExLog.put("Accuracy low: " + location.getAccuracy() + ";" + m_minAccuracy); return; } - Location prevLocation = m_runningRecord.getPrevLocation(); if (prevLocation != null && prevLocation.distanceTo(location) < location.getAccuracy()) { ExLog.put("Move not enough: " + location.getAccuracy() + ";" + prevLocation.distanceTo(location)); return; @@ -421,7 +435,9 @@ public class TokyoRunners extends TabActivity implements LocationListener { m_elapsedTime.start(); m_lapTime.start(); - m_runningRecord.addRecord(new Date(), null, ""); + Location startPoint = m_locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); + + m_runningRecord.addRecord(new Date(), startPoint, "start"); Button startStopButton = (Button) findViewById(R.id.button_start_stop); Button resetLapButton = (Button) findViewById(R.id.button_reset_lap); @@ -435,7 +451,9 @@ public class TokyoRunners extends TabActivity implements LocationListener { } private void stop() { - m_runningRecord.addRecord(new Date(), null, ""); + Location finishPoint = m_locMgr.getLastKnownLocation(LocationManager.GPS_PROVIDER); + + m_runningRecord.addRecord(new Date(), finishPoint, "finish"); m_elapsedTime.stop(); m_lapTime.stop(); @@ -511,6 +529,9 @@ public class TokyoRunners extends TabActivity implements LocationListener { return m_runningRecord.getNextRecord(new Date(recordTime)); } + public static Iterator getRecordIterator() { + return m_runningRecord.getIterator(); + } @Override public boolean dispatchKeyEvent(KeyEvent event) {