Android Service stirb nach dem Beenden der Activity?

  • Antworten:14
  • OffenNicht stickyNicht beantwortet
Gelöschter Account
  • Forum-Beiträge: 20

05.02.2018, 16:29:18 via Website

Hallo Community,

ich habe eine Dienst programmiert und startet auch ordentlich. Allerdings beendet mit Activity, das verstehe ich nicht:

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;

import java.io.File;
import java.util.Timer;
import java.util.TimerTask;

public class S1_Daten_Hochladen extends Service {
public S1_Daten_Hochladen() {
}// Konstruktor - ENDE

@Nullable @Override public IBinder onBind(Intent intent) {return null;}

@Override public void onCreate() {
    //can.out("onCreate", new Throwable());
    new Interne_Timer(10L, 5000L);
}// onCreate - ENDE

@Override
public void onDestroy() {
    super.onDestroy();
    //can.out("onDestroy", new Throwable());
}// onDestroy - ENDE

class Interne_Timer {
    Timer timer = new Timer();
    public Interne_Timer(Long verzögern, Long periode) {
        timer.schedule(
                new TimerTask() {
                    public void run() {
                        haupt_funktion();
                    }// run - ENDE
                },// TimerTask - ENDE
                verzögern,
                periode
        );
    }
    void haupt_funktion(){
        //can.out("service start", new Throwable());
        System.out.println("service start");
        File dir = new File(can.gib_Standard_path() + Glob.path);
        File[] files = dir.listFiles();
        if (files != null) {

            if (files.length == 0){
                if (Glob.activity_an == false){
                    //can.out("Service stop", new Throwable());
                    //stopSelf();
                }
            }else{
                for (int i = 0; i < files.length; i++) {
                    //can.out(files[i].getAbsolutePath(), new Throwable());
                }
            }
        }// if (files != null) - ENDE
    }// haupt_funktion - ENDE

    void timer_stop(){
        timer.cancel();
        timer.purge();
    }// timer_stop - ENDE

}// class - interne_Timer - ENDE

}// class - S1_Daten_Hochladen - ENDE

        <service
        android:name=".S1_Daten_Hochladen"
        android:enabled="true"
        android:stopWithTask="false"
        android:exported="true">
    </service>

onDestroy wird gar nicht aufgerufen.
Weiß jemand, warum das passiert?

— geändert am 05.02.2018, 16:29:53

Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 11:41:48 via Website

Danke Pascal aber leider es funktioniert auch nicht:

public class S1_Datei_Hochladen extends IntentService {

public S1_Datei_Hochladen() {super("");}
public S1_Datei_Hochladen(String name) {super(name);}

@Override protected void onHandleIntent(@Nullable Intent intent) {
    can.out("onHandleIntent", new Throwable());
    new cans_Timer();
}// onHandleIntent

}// class - S1_Datei_Hochladen - ENDE

public class cans_Timer {
Timer timer = new Timer();
Long periode = 5000L;

public cans_Timer() {
    timer.schedule(
            new TimerTask() {
                public void run() {
                    haupt_funktion();
                }// run - ENDE
            },// TimerTask - ENDE
            0L,
            periode
    );
}// Konstruktor - ENDE

void haupt_funktion() {
    can.out("service start", new Throwable());
    File dir = new File(can.gib_Standard_path() + Glob.path);
    File[] files = dir.listFiles();
    if (files != null) {

        if (files.length == 0){
            if (Glob.activity_an == false){
                can.out("Service stop", new Throwable());
                //stopSelf();
            }
        }else{
            for (int i = 0; i < files.length; i++) {
                //can.out(files[i].getAbsolutePath(), new Throwable());
            }
        }// (files.length == 0) - ENDE
    }// if (files != null) - ENDE
}// haupt_funktion - ENDE

void timer_stop(){
    timer.cancel();
    timer.purge();
}// timer_stop - ENDE

}// class - ENDE

        <service
        android:name=".S1_Datei_Hochladen"
        android:stopWithTask="false"
        />

Ausgabe:
D/ViewRootImpl@b8ce712[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 1
I/System.out: 0000000--->>> service start <<<-000->>> Zeile: 24 * Datei: cans_Timer.java <<<---0000000
I/System.out: 0000000--->>> service start <<<-000->>> Zeile: 24 * Datei: cans_Timer.java <<<---0000000

D/ViewRootImpl@b8ce712[MainActivity]: MSG_WINDOW_FOCUS_CHANGED 0
D/InputTransport: Input channel destroyed: fd=84
I/System.out: 0000000--->>> service start <<<-000->>> Zeile: 24 * Datei: cans_Timer.java <<<---0000000
I/System.out: 0000000--->>> Service stop <<<-000->>> Zeile: 31 * Datei: cans_Timer.java <<<---0000000
I/System.out: 0000000--->>> service start <<<-000->>> Zeile: 24 * Datei: cans_Timer.java <<<---0000000
I/System.out: 0000000--->>> Service stop <<<-000->>> Zeile: 31 * Datei: cans_Timer.java <<<---0000000
Application terminated.

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 11:47:32 via Website

Ich bekomme keine Fehler. Nur Service wird beendet, wenn die Activity beendet wird.
Service sollte weiterhin laufen.

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

06.02.2018, 12:11:06 via Website

Nur Service wird beendet, wenn die Activity beendet wird.

Definitiv muss ein Fehler vorliegen - Deine Activity verursacht also den Fehler und reisst den
Service mit in den Keller.

P.S Deine Consolen - outs interessieren hier nicht - der Errorlog aus dem LogCat ist der Wichtige

P.S.1 - Dein Sourceaufbau ist auch nicht so ganz Java/Android konform - eher C/C++
Den Thread hättest du z.b. besser in einen AsyncTask eingebettet

— geändert am 06.02.2018, 12:12:51

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

06.02.2018, 12:35:01 via Website

a) warum startest du viermal hintereinander dein "Datei_hochladen" ? (lt. deiner console)
b) Wenn du nicht debuggen kannst , log doch mal die einzelnen Schritte im Service

Könnte man mal erfahren ,was du da genau machen willst ? - ich habe immer noch nicht verstanden , warum das in einen Service muss , und ein normaler ordentlicher Thread nicht ausreicht

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 12:40:44 via Website

Ich starte doch nicht mehrere mal das selbe Klasse. Das ist meine console Ausgabe. Es kommt nicht von System, sonder von mir.

Debuggen habe ich noch nie gemacht und ich weiß nicht wie.

Meine ziel ist, dass die Dateien hochgeladen werden, sobald man die Activity beendet.

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 12:42:37 via Website

Debug Ausgabe

— geändert am 06.02.2018, 12:52:53

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

06.02.2018, 12:53:10 via Website

Meine ziel ist, dass die Dateien hochgeladen werden, sobald man die Activity beendet.

Na irgendwas baust du da hin, was sooooooooooooooo gar nicht gehen kann :-)

Du kannst auch nicht einfach den Service mehrfach hintereinander abschiessen.

a) Da muss EIN vernünftiger Service her, den du anstossen kannst / musst.
b) Im Service solltest du AsyncTask verwenden und zwar am besten singlepipe
c) Na debuggen ist das A & O beim Programmieren - Ich wüsste gar nicht , wie ich ohne auskäme.
Jetzt wird auch so Einges klar, warum du Consolen-Output verwendest, das wird so nicht klappen.

Edit : Debuggen : Step for Step im Runtime , kein logout.

Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'

Wasn das ???

— geändert am 06.02.2018, 12:57:19

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 13:07:12 via Website

Keine Ahnung was das ist. Ich benutze keine Virtuelle Maschine, sondern ein Handy um zu testen.
Daher weiß ich auch nicht was mit "Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'" auf sich hat.
Aber ich erhielt das als ich die App geschlossen habe.

"Na irgendwas baust du da hin, was sooooooooooooooo gar nicht gehen kann :-)"

Wenn ich nur wüsste was...

— geändert am 06.02.2018, 13:10:14

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 2.902

06.02.2018, 13:12:12 via Website

Wenn ich nur wüsste was...

Die Vorgehensweise habe ich dir aber oben schon erklärt.

Ich möchte Dir auch nicht zu nahe treten - Ich würde Dir ans Herz legen , dich mal ein wenig mehr
im Vorfeld mit den Eigenschaften von Android / Java auseinander zu setzen.

Und vor allem mit den Thread und Service Grundlagen.

— geändert am 06.02.2018, 13:12:22

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 13:15:17 via Website

Danke dir swa00

Hilfreich?
Diskutiere mit!
Gelöschter Account
  • Forum-Beiträge: 20

06.02.2018, 16:28:07 via Website

So wie ich herausgefunden habe, wird der Dienst doch gestartet.
Allerdings, wenn man die Activity killt, stirb auch der Dienst mit.
Danach startet dienst zwar erneut aber der Arbeit ist unterbrochen und beim neu start wird keine Methode aufgerufen.
Den Dienst in ein eigenen Prozess zu starten wäre eine Lösung. Leider klappt es nicht.
Dann Startet der Dienst gar nicht.

— geändert am 06.02.2018, 16:29:36

Hilfreich?
Diskutiere mit!

Empfohlene Artikel