diff --git a/app/src/main/java/eu/piotro/sondechaser/MainActivity.java b/app/src/main/java/eu/piotro/sondechaser/MainActivity.java index 5d56834..b60cdc3 100644 --- a/app/src/main/java/eu/piotro/sondechaser/MainActivity.java +++ b/app/src/main/java/eu/piotro/sondechaser/MainActivity.java @@ -35,6 +35,11 @@ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { + // TODO: Main activity get destroyed on task-switch. + // It probably should be there (but where?), we need further separation of tasks and UI (could help loading times also) + // It should be created in app constructor (notification about running in backgroud?) and non re-crated on UI crate!!!! + + // main activy is destroyed and then recreated - kill all other threads on destroy dataCollector = new DataCollector(this); super.onCreate(savedInstanceState); diff --git a/app/src/main/java/eu/piotro/sondechaser/data/DataCollector.java b/app/src/main/java/eu/piotro/sondechaser/data/DataCollector.java index 87daa1d..237e716 100644 --- a/app/src/main/java/eu/piotro/sondechaser/data/DataCollector.java +++ b/app/src/main/java/eu/piotro/sondechaser/data/DataCollector.java @@ -98,22 +98,23 @@ public class DataCollector implements Runnable { if((++it)%10 == 0 && toGeoPoint(locationProvider.getLastKnownLocation()) == null) { rootActivity.runOnUiThread(() -> { - System.out.println("rs"); - System.out.println((locationProvider.startLocationProvider(null))); + locationProvider.startLocationProvider(null); }); } } } catch (InterruptedException ignored) {} } - - public void initCollectors() { - System.out.println("INITCOLSRC"); + private void stopCollectors() { if(rs_col != null) rs_col.stop(); if(sh_col != null) sh_col.stop(); if(lc_col != null) lc_col.stop(); + } + public void initCollectors() { + System.out.println("INITCOLSRC"+lc_col); + stopCollectors(); refresh(); @@ -348,5 +349,6 @@ public class DataCollector implements Runnable { mapUpdater = null; compassUpdater = null; stop = true; + stopCollectors(); } } \ No newline at end of file diff --git a/app/src/main/java/eu/piotro/sondechaser/data/LocalServerCollector.java b/app/src/main/java/eu/piotro/sondechaser/data/LocalServerCollector.java index 138a012..010f0e7 100644 --- a/app/src/main/java/eu/piotro/sondechaser/data/LocalServerCollector.java +++ b/app/src/main/java/eu/piotro/sondechaser/data/LocalServerCollector.java @@ -89,7 +89,6 @@ public class LocalServerCollector implements Runnable { } catch (InterruptedException ignored) {} boolean ignored = Thread.interrupted(); } - disable(); System.out.println("lcexit"); } @@ -223,5 +222,6 @@ public class LocalServerCollector implements Runnable { public void stop() { stop = true; + disable(); } } diff --git a/app/src/main/java/eu/piotro/sondechaser/data/local/MySondyDownloader.java b/app/src/main/java/eu/piotro/sondechaser/data/local/MySondyDownloader.java index 89e6839..123a643 100644 --- a/app/src/main/java/eu/piotro/sondechaser/data/local/MySondyDownloader.java +++ b/app/src/main/java/eu/piotro/sondechaser/data/local/MySondyDownloader.java @@ -25,7 +25,6 @@ public class MySondyDownloader implements LocalServerDownloader { @Override public void enable() { - disable(); // Address and mode should be configured already in passed object bt_runnable = blueAdapter.getRunnable(); bt_thread = new Thread(bt_runnable); diff --git a/app/src/main/java/eu/piotro/sondechaser/handlers/BlueAdapter.java b/app/src/main/java/eu/piotro/sondechaser/handlers/BlueAdapter.java index eb9620a..87e69eb 100644 --- a/app/src/main/java/eu/piotro/sondechaser/handlers/BlueAdapter.java +++ b/app/src/main/java/eu/piotro/sondechaser/handlers/BlueAdapter.java @@ -95,6 +95,7 @@ public class BlueAdapter { try { bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(WELL_KNOWN_SERIAL_UUID); device_invalidate = false; + System.out.println("BT Device created"); return true; } catch (IOException e) { // TODO: Replace with status text, or ignore for now in settings is probably enough @@ -105,21 +106,21 @@ public class BlueAdapter { } @SuppressLint("MissingPermission") - public void connectDevice() { + public boolean connectDevice() { if (!permissionCheck()) - return; + return false; failed = true; - if(bluetoothSocket.isConnected()) - close(); - try { bluetoothSocket.connect(); // this fails when device is offline - just silently ignore it + // or when there is some error and we need to recreate socket reader = new BufferedReader(new InputStreamReader(bluetoothSocket.getInputStream())); writer = new PrintWriter(new OutputStreamWriter(bluetoothSocket.getOutputStream())); updateFreq(); - } catch (Exception ignored) {} + return true; + } catch (Exception e) {e.printStackTrace();} + return false; } public String readLine() { @@ -189,7 +190,10 @@ public class BlueAdapter { String line = readLine(); // this fails in all cases (device offline, closed transmission error) if (line == null) { System.out.println("BTTHREAD: Reconnect"); - connectDevice(); + if(!connectDevice()) { + close(); + createDevice(); + } try { Thread.sleep(2000); } catch (InterruptedException ignored) {} } else { System.out.println("BTHREAD: received " + line);