Intent initialisieren

  • Antworten:6
Robbiani Renato
  • Forum-Beiträge: 615

11.07.2021, 09:02:17 via Website

Hallo zusammen

In einer Beispiel App möchte ich einen Dienst starten und wieder beenden. Da ich die Intent zwei mal benötige wollte ich ihn global initialisieren.

private lateinit var intent: Intent

Aber genau das geht nicht.

package ch.robbisoft.servicedemo1

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import ch.robbisoft.servicedemo1.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

private lateinit var intent: Intent

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    binding.btnStart.setOnClickListener {
        intent = Intent(this, DemoService::class.java)
        startService(intent)

// finish()
}
}

override fun onDestroy() {
    super.onDestroy()

// val intent = Intent(this, DemoService::class.java)
stopService(intent)
}
}

Kann mir Jemand sagen warum das nicht geht? Was mache ich falsch?

Gruss Renato

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.07.2021, 11:28:36 via Website

Woher weißt du dass es nicht geht? Loggst du etwas in deinem Service?
Hast du diesen in der Manifest eingetragen?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 615

11.07.2021, 15:20:26 via Website

Ciao Pascal

Die Zeile "private lateinit var intent: Intent" ist rot unterlegt. Zusätzlich ist die Variable "intent" mit einer Linie unterlegt. Die App kann ich ausführen aber der Service wir nicht beendet. Darum gehe ich davon aus, dass irgend was nicht korrekt ist.

Gruss Renato

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

11.07.2021, 16:05:27 via Website

Den Intent musst du dir nicht speichern, den kannst du auch wieder neu erstellen.
Du sagst, der Service wird nicht gestoppt, d.h. gestartet wird er?

Hast du Überprüft ob die OnDestroy deiner Activity überhaupt ausgeführt wird?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 615

12.07.2021, 08:07:22 via Website

Ciao Pascal

Ich sehe es das onDestroy durchlaufen wird in dem wenn ich es wie folgt mache

val intent = Intent(this, DemoService::class.java)
    stopService(intent)

Wird der service gestoppt. So wie es aussieht kann man den Intent nicht global anlegen. Gut zu wissen. Ich kann damit leben.

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.537

12.07.2021, 09:22:41 via Website

Doch kann man , wenn du ihn als Instanzvariable hast und benutzen willst dann darfst du aber keinen localen mit dem gleichen Bezeichnet erstellen.
Lasse das val weg wenn du den globalen benutzen willst.

val intent = Intent(this, DemoService::class.java)
erstellt einen neuen lokalen Intent




lateinit var intent: Intent

 intent = Intent(this, DemoService::class.java)

 startService(intent)
  ....

 stopService(intent)

I

— geändert am 12.07.2021, 21:37:53

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 615

13.07.2021, 16:52:05 via Website

Ciao Jokel

Danke für die Antwort.
Bei mir will es einfach nicht. Am nächsten komme ich mit folgendem

private lateinit var intent?: Intent

Da ist nur noch ":Intent" rot unterlegt. Aber funktionieren tut es trotzdem nicht.

Gruss Renato

Hilfreich?
Kommentieren