diff --git a/app/build.gradle b/app/build.gradle index 53acd59..bb9847d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,4 +74,6 @@ dependencies { // OpenStreetMap implementation 'org.osmdroid:osmdroid-android:6.1.14' + + debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10' } diff --git a/app/src/main/java/net/voussoir/trkpt/MapFragment.kt b/app/src/main/java/net/voussoir/trkpt/MapFragment.kt index bb2fa52..92397e5 100644 --- a/app/src/main/java/net/voussoir/trkpt/MapFragment.kt +++ b/app/src/main/java/net/voussoir/trkpt/MapFragment.kt @@ -296,17 +296,22 @@ class MapFragment : Fragment() } } + override fun onDestroyView() + { + Log.i("VOUSSOIR", "MapFragment.onDestroy") + super.onDestroyView() + if (database_changed_listener in trackbook.database_changed_listeners) + { + trackbook.database_changed_listeners.remove(database_changed_listener) + } + } + override fun onDestroy() { Log.i("VOUSSOIR", "MapFragment.onDestroy") super.onDestroy() trackerService.mapfragment = null requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) - - if (database_changed_listener in trackbook.database_changed_listeners) - { - trackbook.database_changed_listeners.remove(database_changed_listener) - } } private val requestLocationPermissionLauncher = registerForActivityResult(RequestPermission()) { isGranted: Boolean -> @@ -594,10 +599,14 @@ class MapFragment : Fragment() private val connection = object : ServiceConnection { override fun onServiceConnected(className: ComponentName, service: IBinder) { + // get reference to tracker service] + val serviceref = (service as TrackerServiceBinder).service.get() + if (serviceref == null) + { + return + } bound = true - // get reference to tracker service - val binder = service as TrackerService.LocalBinder - trackerService = binder.service + trackerService = serviceref trackerService.mapfragment = thismapfragment // get state of tracking and update button if necessary trackingState = trackerService.trackingState diff --git a/app/src/main/java/net/voussoir/trkpt/TrackerService.kt b/app/src/main/java/net/voussoir/trkpt/TrackerService.kt index 3d328bc..b75d039 100644 --- a/app/src/main/java/net/voussoir/trkpt/TrackerService.kt +++ b/app/src/main/java/net/voussoir/trkpt/TrackerService.kt @@ -57,6 +57,7 @@ import net.voussoir.trkpt.helpers.isRecentEnough import net.voussoir.trkpt.helpers.iso8601_local import net.voussoir.trkpt.helpers.random_device_id import org.osmdroid.util.GeoPoint +import java.lang.ref.WeakReference import java.util.* class TrackerService: Service() @@ -70,12 +71,12 @@ class TrackerService: Service() var currentBestLocation: Location = getDefaultLocation() var lastCommit: Long = 0 var location_min_time_ms: Long = 0 - private val RECENT_TRKPT_COUNT = 7200 + private val RECENT_TRKPT_COUNT = 3600 private val DISPLACEMENT_LOCATION_COUNT = 5 lateinit var recent_displacement_locations: Deque lateinit var recent_trackpoints_for_mapview: MutableList var bound: Boolean = false - private val binder = LocalBinder() + private val binder = TrackerServiceBinder(this) private lateinit var notificationManager: NotificationManager private lateinit var notification_builder: NotificationCompat.Builder @@ -562,8 +563,8 @@ class TrackerService: Service() } } } - - inner class LocalBinder : Binder() { - val service: TrackerService = this@TrackerService - } +} +class TrackerServiceBinder(trackerservice: TrackerService) : Binder() +{ + val service: WeakReference = WeakReference(trackerservice) }