# Service starte nicht mehr



## Joob (12. Jul 2019)

Ich weiß nicht was ich gemacht habe, aber plötzlich startet ein Service nicht mehr.
Kann jemand etwas mit der Fehlermeldung anfangen ?


```
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.traincounter.jupp.vtmobil, PID: 9441
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.traincounter.jupp.vtmobil/com.traincounter.jupp.vtmobil.MainActivity}: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.traincounter.jupp.vtmobil/.SYS.TimerService }: app is in background uid UidRecord{fd77884 u0a134 TRNB idle change:uncached procs:1 seq(0,0,0)}
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3260)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
     Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.traincounter.jupp.vtmobil/.SYS.TimerService }: app is in background uid UidRecord{fd77884 u0a134 TRNB idle change:uncached procs:1 seq(0,0,0)}
        at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1616)
        at android.app.ContextImpl.startService(ContextImpl.java:1571)
        at android.content.ContextWrapper.startService(ContextWrapper.java:669)
        at com.traincounter.jupp.vtmobil.MainActivity.onCreate(MainActivity.java:125)
        at android.app.Activity.performCreate(Activity.java:7783)
        at android.app.Activity.performCreate(Activity.java:7772)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3235)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3396)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2009)
        at android.os.Handler.dispatchMessage(Handler.java:107)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7319)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:934)
I/Process: Sending signal. PID: 9441 SIG: 9
Application terminated.
```


Der Service ist im Manifest eingetragen und lief bis gestern auch, ich wollte nur eine paar Komentare schreiben und eigentlich heute mit dem weiteren Klassen anfangen und jetzt geht nichts mehr.

Ich kapier es nicht.

Soll ich noch ein bischen Code posten oder sagt das schon jemanden was ?


----------



## Joob (12. Jul 2019)

Ich denke der Code wird notwendig sein.


Hier ist das Manifest

```
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.traincounter.jupp.vtmobil">

    <!-- Wichtig für Internetzugriff mit php und ftp -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".A0000_SpeechSelector"></activity>
        <activity android:name=".A1000_GeneralSelector"></activity>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> <!-- Deklarieren der Services -->
        <service android:name=".SYS.TimerService" />
    </application>

</manifest>
```



Und hier die MainActivity

```
public class MainActivity extends AppCompatActivity implements Dialog_GetPrefData.dialog_getPrefDataListener {


    // Programm Prefs

    public final static String SHARED_PREFS = "available";

    public final static String URLHOST = "url";

    public final static String SCHOOLCODE = "sc";



    // Deklarationen

    // Classes

    EncodeClass ec = new EncodeClass ( );


    // Elements

    private EditText uname;

    private EditText pword;

    private ProgressBar probarma;


    // global Variables

    private String username = "";

    private String password = "";


    private String urlhoster = "";

    private String schoolcode = "";

    private String responslogin = "";



    @Override

    protected void onCreate(Bundle savedInstanceState) {


        System.setProperty ("TimeForRunTimeCalc", "");

        System.setProperty ("AppActAct", "");


        System.setProperty ("VERSNO", "");

        System.setProperty ("UPDATVERSNO" , "");

        System.setProperty ("USERMAX" , "");

        System.setProperty ("USERPRESENT" , "");


        System.setProperty ("BASEURL" , "");

        System.setProperty ("SCHOOLCODE" , "");


        System.setProperty ("USERNO" , "");

        System.setProperty ("USERSTATUS" , "");


        System.setProperty ("LANGUAGEID", "" );

        System.setProperty ("COURSID", "");

        System.setProperty ("BLOCKID", "");

        System.setProperty ("TESTGRADE", "");


        System.setProperty ("SYSPINNO" , "");


        System.setProperty ("SCHOOLID" , "");

        System.setProperty ("SCHOOLNAME" , "");

        System.setProperty ("SCHOOLPLZ" , "");

        System.setProperty ("SCHOOLCITY" , "");

        System.setProperty ("SCHOOLLAND" , "");


        System.setProperty ("B_FTPURL" , "");

        System.setProperty ("B_FTPSERVER" , "");

        System.setProperty ("B_FTPUSER" , "");

        System.setProperty ("B_FTPPASS" , "");

        System.setProperty ("B_FTPPORT" , "");


        System.setProperty ("S_FTPURL" , "");

        System.setProperty ("S_FTPSERVER" , "");

        System.setProperty ("S_FTPUSER" , "");

        System.setProperty ("S_FTPPASS" , "");

        System.setProperty ("S_FTPPORT" , "");



        Log.d ("vtmobdebug" , "----------------------------------- bin in on Create");


        // Set new basetime for Calc runtime

        java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");

        Date currentTime = new Date();

        System.setProperty ("TimeForRunTimeCalc", formatter.format(currentTime));


        System.setProperty("VERSNO", "0000001");


        super.onCreate (savedInstanceState);

        setContentView (R.layout.activity_main);

        if (android.os.Build.VERSION.SDK_INT > 9) {

            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder ( ).permitAll ( ).build ( );

            StrictMode.setThreadPolicy (policy);

        }


        getPrefData ( );


        // Message Service

        startService (new Intent (this , TimerService.class));


        uname = (EditText) findViewById (R.id.txtloginname);

        pword = (EditText) findViewById (R.id.txtpassword);

        Button btnlogin = (Button) findViewById (R.id.cmdLogin);

        Button btnsetschooldata = (Button) findViewById (R.id.cmbSetSchooldata);


        probarma = (ProgressBar) findViewById (R.id.pbtest);




        Log.d ("vtmobdebug" , "----------------------------------- bin in on Create4 " + System.getProperty ("AppActAct"));


        try {

            Boolean isVerified = setSysProps ( );

        } catch ( IOException e ) {

            e.printStackTrace ( );

        }


        // Basic View anzeigen

        btnlogin.setOnClickListener (new View.OnClickListener ( ) {

            @Override

            public void onClick(View view) {


                LoginClass lc = new LoginClass ( );


                username = uname.getText ( ).toString ( );

                password = pword.getText ( ).toString ( );


                try {


                    responslogin = lc.check_UserPass (username , password);


                } catch ( InstantiationException e ) {

                    e.printStackTrace ( );

                } catch ( IllegalAccessException e ) {

                    e.printStackTrace ( );

                } catch ( ClassNotFoundException e ) {

                    e.printStackTrace ( );

                } catch ( SQLException e ) {

                    e.printStackTrace ( );

                } catch ( IOException e ) {

                    e.printStackTrace ( );

                } catch ( JSONException e ) {

                    e.printStackTrace ( );

                }


                if (responslogin == null) {

                    Toast.makeText (MainActivity.this , "Password ist wrong !" , Toast.LENGTH_LONG).show ( );


                } else if (responslogin.equals ("0")) {

                    Toast.makeText (MainActivity.this , "You are already logged in !" , Toast.LENGTH_LONG).show ( );


                } else {


                    // Systemvariablen festlegen

                    System.setProperty ("USERNO" , responslogin);


                    // Set new basetime for Calc runtime

                    SimpleDateFormat formatter = new SimpleDateFormat ("yyyy-MM-dd HH:mm:ss");

                    Date currentTime = new Date();

                    System.setProperty ("TimeForRunTimeCalc", formatter.format(currentTime));


                    try {


                        System.setProperty ("USERSTATUS" , lc.getuserstatus (responslogin));

                        lc.setLoginTime ( );                                                        // LoginController Time setzen

                        sys_safeuserpara (System.getProperty ("USERNO"));                           // Userdaten speicher, einmal lastlogin und die Version mit der das login erfolgte


                    } catch ( InstantiationException e ) {e.printStackTrace ( );

                    } catch ( IllegalAccessException e ) {e.printStackTrace ( );

                    } catch ( ClassNotFoundException e ) {e.printStackTrace ( );

                    } catch ( SQLException e ) {e.printStackTrace ( );

                    } catch ( IOException e ) {e.printStackTrace ( );

                    } catch ( JSONException e ) {e.printStackTrace ( );}


                    //Toast.makeText (MainActivity.this , "Username : " + username + " - Password : " + password , Toast.LENGTH_LONG).show ( );


                    Intent i = new Intent (MainActivity.this , A0000_SpeechSelector.class);

                    startActivity (i);


                }

            }

        });


        // Dialog für Eingabe der BasisConect

        btnsetschooldata.setOnClickListener (new View.OnClickListener ( ) {

            @Override

            public void onClick(View view) {


                Dialog_GetPrefData dialog_getPrefData = new Dialog_GetPrefData ( );

                dialog_getPrefData.show (getSupportFragmentManager ( ) , "Dialog GetPrefData");


            }

        });


    }



    @Override

    protected void onResume() {

        // Wird für die Onlinetime (TimerService) verwendet, wenn Prop = "" wird keine Zeit berechnet

        System.setProperty("AppActAct", "Main");

        super.onResume ( );

    }



    @Override

    protected void onPause() {



       // Log.d ("vtmobdebug" , "----------------------------------- bin in on Pause");


        endapp ( );

        uname.setText ("");

        pword.setText ("");


        // Wird für die Onlinetime (TimerService) verwendet, wenn Prop = "" wird keine Zeit berechnet

        System.setProperty("AppActAct", "-");


        super.onPause ( );



    }



    private void setPrefData(String urlhoster , String schoolcode) {


        // in den SharedPreference werden die BasisConect Daten gespeichert

        SharedPreferences sharedPreferences = getSharedPreferences (SHARED_PREFS , MODE_PRIVATE);

        SharedPreferences.Editor editor = sharedPreferences.edit ( );


        //Toast.makeText (MainActivity.this , "before set schoolcode : " + schoolcode + " - before set URL : " + urlhoster, Toast.LENGTH_LONG).show ();


        editor.putString (SCHOOLCODE , schoolcode.toString ( ));

        editor.putString (URLHOST , urlhoster.toString ( ));


        editor.apply ( );


        Toast.makeText (MainActivity.this , "set schoolcode : " + sharedPreferences.getString (SCHOOLCODE , "") + " - set URL : " + sharedPreferences.getString (URLHOST , "") , Toast.LENGTH_LONG).show ( );

    }



    private void getPrefData() {


        // in den SharedPreference werden die BasisConect Daten gespeichert

        SharedPreferences sharedPreferences = getSharedPreferences (SHARED_PREFS , MODE_PRIVATE);

        urlhoster = sharedPreferences.getString (URLHOST , "");

        schoolcode = sharedPreferences.getString (SCHOOLCODE , "");


        Toast.makeText (MainActivity.this , "get schoolcode : " + sharedPreferences.getString (SCHOOLCODE , "") + " - get URL : " + sharedPreferences.getString (URLHOST , "") , Toast.LENGTH_LONG).show ( );


        if ((urlhoster.equals ("")) || (schoolcode.equals (""))) {


            Dialog_GetPrefData dialog_getPrefData = new Dialog_GetPrefData ( );

            dialog_getPrefData.show (getSupportFragmentManager ( ) , "Dialog GetPrefData");


            urlhoster = sharedPreferences.getString (URLHOST , "");

            schoolcode = sharedPreferences.getString (SCHOOLCODE , "");


        }


    }



    @Override

    public void applyTexts(String strurlhoster , String strschoolcode) {

        // Daten aus Dialoglistener

        setPrefData (strurlhoster , strschoolcode);

    }
```


----------



## Joob (12. Jul 2019)

Ach so, das Build klapp natürlich, keine Fehler.


----------



## kneitzel (12. Jul 2019)

Hi,

das Problem scheint erst einmal zu sein, dass Du einen Service starten willst, aber deine App dies im aktuellen Zustand nicht darf.
(Mit Android O ist da einiges geändert worden.)

Generell wäre mein Ratschlag, dass Du Dir das Thema mit den Services von Grund auf noch einmal anschaust, Aber evtl. willst Du auch einfach mal https://stackoverflow.com/questions...eexception-not-allowed-to-start-service-inten anschauen. Da finden sich Lösungsideen, Erläuterungen, .... 

Evtl. ist startForegroundService statt startService eine Lösung, die Du nutzen kannst. Evtl. ist aber auch ein JobScheduler eher das, was Du nutzen willst?


----------



## Joob (12. Jul 2019)

Ich habe jetzt mal den ServiceStart auskommentiert aber das haut immer noch nicht hin.

Jetzt wird der Dialog nicht angezeigt, der ist aber wichtig.

Ich habe gestern ein paar Kommentare eingefügt und eine kleine Änderung durchgeführt.
Ich habe so den Eindruck das das was mit den Prefs zu tun hat.
Muss ich mir aber noch mal anschauen .

Ich melde mich noch mal, irgendetwas ist das nicht richtig.

In den Prefs werden Daten eingegeben, die für Entschlüsselung der Zugangsdaten notwendig sind.
Aber eben wurde dann auch das Dialogfeld nicht angezeigt. (neues virtuelles APK)

Ich kann jetzt alles wieder laufen lassen, aber die Konstruktion stimmt noch nicht.

Eine Frage:
Wenn ich den Dialog aufrufe, wird dann der Code im onCreate weiter ausgeführt ?


----------



## Joob (13. Jul 2019)

Ich habe das jetzt mal umstrukturiert kann es aber erst morgen testen.
Möchstet du da was hören ?


----------



## mihe7 (13. Jul 2019)

Joob hat gesagt.:


> Möchstet du da was hören ?


Es ist nie verkehrt, Feedback zu geben.

BTW: https://stackoverflow.com/questions...eexception-not-allowed-to-start-service-inten


----------



## Joob (13. Jul 2019)

Hallo,

die ganze Sache scheint ziemlich verfahren zu sein.

1. ich wollte zwei Parameter in den Prefernces speichern, die sollten doch so lange erhalten bleiben bis das Device komplett ausgeschaltet wurde. Ist das richtig ? Hatte bis vor zwei Tagen auch so funktioniert.

2. ich wollte eine OnlineTime berechnen, dafür sollte ein Backgroundservice laufen und der sollte beendet werden wenn die MainActivity beendet wird. Auch das hatte bis vor zwei Tagen funktioniert.

Jetzt wird unter ab API 28 der Dialog nicht mehr angezeigt und die App wird beendet und auch die Preferences werden nicht mehr gehalten, selbst in API27, dort wird der Dialog noch angezeigt.

Hab ich da die falschen Instrumente gewählt, wie würdest du das umsetzen damit es stabil läuft und nicht so sehr von den APIs abhängig ist.


----------



## Joob (13. Jul 2019)

Das ist die Fehlermeldung unter vtmobildebug sieht man das der Service gestartet ist. Was dann zum Absturtz führt ist mir nicht klar.
Alles unter API27


D/vtmobdebug: ----------------------------------- Activ Activity in TimerClass1 Main
    ----------------------------------- userno im TimerClass
I/Choreographer: Skipped 33 frames!  The application may be doing too much work on its main thread.
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
V/View: dispatchProvideAutofillStructure(): not laid out, ignoring 0 children of 1073741845
I/AssistStructure: Flattened final assist data: 6180 bytes, containing 2 windows, 23 views
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
I/chatty: uid=10080(com.traincounter.jupp.vtmobil) RenderThread identical 1 line
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
I/chatty: uid=10080(com.traincounter.jupp.vtmobil) RenderThread identical 8 lines
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
I/zygote: Thread[3,tid=4695,WaitingInMainSignalCatcherLoop,Thread*=0xadacec00,peer=0x15c83880,"Signal Catcher"]: reacting to signal 3
I/zygote: Wrote stack traces to '[tombstoned]'
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/EGL_emulation: eglMakeCurrent: 0x919afba0: ver 2 0 (tinfo 0x91904f20)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.traincounter.jupp.vtmobil, PID: 4689
    android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground()
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1768)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
Application terminated.


----------



## Joob (13. Jul 2019)

Kannst du mir sagen was android von mir will.
Ich habe bereits im SDK Manager alle Versionen downgeloaded und und auch die neuste Version studio installiert


----------



## Joob (13. Jul 2019)




----------



## mihe7 (13. Jul 2019)

Schau mal hier: https://stackoverflow.com/questions...ice-did-not-then-call-service-startforeground


----------



## Joob (13. Jul 2019)

Ich schau mir das gleich mal an.
Die anderen Probleme mit Außnahme der ADB Meldung habe ich gelöst.

Weißt du wa ich wegen der ADB unternehmen muss ?


----------



## Joob (19. Jul 2019)

Also die Sache war die das ich durch die Anordnung nicht klar sehen konnte was da  problematisch war.
Das hab ich geändert, die Pref sind stabil zu erreichen und zu verändern.

Den Service hab ich auch am Laufen.
Dann hab ich einen Scheduler probiert, der macht aber noch Probleme. Ich hab dazu mal was gefragt, ich komm noch nicht dahinter.

Momentan versuche ich mich an AsynTask und versuch ein S5 so einzurichten das API 28 darauf läuft.

Also kein Mangel an ungelösten Problemen.


----------

