Thread

S

Sonse

Neues Mitglied
0
Hi,
kann mir jemand helfen??
Ich soll eine Applikation schreiben, die aus einer Activity und einem Service besteht.
Die View der Activity hat einen Button. Bei Aktivierung des Buttons wird der Service gestartet. Der Service selbst soll dann 2 Threads starten.

Den Button hab ich. Der Service wird dann auch gestartet aber wie muss ich das mit den Threads umsetzen???
 
Du kannst eine Klasse schreiben, die von "Thread" erbt. Dann kanst du von dieser Klassr ein neues Objekt erzeugen und mit "deinThread.start();" den Thread starten :)
 
Best Practice ist eher eine Klasse zu schreiben die Runnable implementiert und dann mit new Thread(new DeinRunnable()).start() zu starten. Ein Runnable ist vielseitiger als direkt ein Thread.
 
Hallo, dass die angegebenen Antworten wirklich "best practise" sein sollen, bezweifle ich stark. Jedenfalls tue ich mir aufgrund von fehlenden Informationen im Startbeitrag schwer damit eine "Lösungsstrategie" zu sehen. Was sollen denn die zwei Threads machen?
 
Meine Antwort war im Kontext eher auf MrDrakens Antwort bezogen. Mit den gegebenen Informationen waren das jeweils die sinnvollsten Antworten die man geben kann. Ob man überhaupt Threads verwenden sollte ist natürlich eine Frage, aber die ursprüngliche Fragestellung war klar in der Anweisung 2 Threads zu erstellen.
 
Zuletzt bearbeitet von einem Moderator:
Danke schonmal für die Antworten.
So lautet die eigentliche Aufgabenstellung.
Schreiben Sie eine mobile Applikation unter Android, die aus einer Activity (der Main-Activity) und einem Service besteht. Die View der Activity hat eine Textausgabe (Klasse TextView), eine Texteingabe (Klasse EditText) und einen Button (Klasse Button). Bei Aktivierung des Buttons wird der Service gestartet. Der Service selbst startet 2 Threads:
- Thread 1: Berechnet eine vorgegebene Anzahl von Primzahlen beginnend bei 1.
- Thread 2: Gibt folgende Daten an einen ResultReceiver zurück
- Zuletzt berechnete Primzahl
- Process-ID (PID) und Thread-ID (TID) von Thread 1
- PID und TID von Thread 2
 
dann mach das doch so:

Thread 1 fängt sofort mit den Berechnungen der Primzahlen an die er von der Mainactivity bekommt.
Währenddessen schläft der zweite thread(spontane Lösung:while loop die darauf wartet dass sich ein boolean ändert)
Hat Thread 1 seine Berechnung beendet joined er Thread 2 (stellt vorher dessen boolean auf false falls du das mit der while implementierst) und übergibt ihm seine informationen die du oben benannt hast also die PID TID Primzahl etc.
Thread 2 erhält die Daten von Thread 1 und liefert diese an den Service.

Thread 2 endet, sagt Thread 1 bescheid, Thread 1 endet während dessen übergibt der Service die erhaltenen Daten an die main Activity. Voila!

Der ursprüngliche Beitrag von 19:20 Uhr wurde um 19:29 Uhr ergänzt:

Thread 1:
Code:
....
run(int primeCount,Thread t2)
{
     //berechne die primes


    t2.PID1=//pid übergeben
    t2.TID1=//TID übergeben
    t2.prime=//prime übergeben
    t2.waiting=false;
    t2.join();
}


Thread 2:

run()
{
    while(waiting);
    
   //alles an den service übergeben

}
 
Zuletzt bearbeitet von einem Moderator:
Danke Jaiel, das hat mir schonmal ein bisschen weitergeholfen

Der ursprüngliche Beitrag von 07:58 Uhr wurde um 08:48 Uhr ergänzt:

kann ich so die Threads in der Service-Klasse starten??

Code:
 ...
Thread t1 = new Thread( new Thread1() );
t1.start();

Thread t2 = new Thread( new Thread2() );
 t2.start();
 ...
 
Zuletzt bearbeitet von einem Moderator:
du kannst sogar einfach nur schreiben:

Code:
new Thread1().start();
new Thread2().start();

falls Thread1/2 von thread geerbt haben ich weiß nicht wie es mit runnable interfaces aussieht
 
Code:
new Thread( new Thread1() ).start()
ist natürlich Quatsch, wenn Thread1 von Thread erbt, weil man dann ein wirklich überflüssiges Thread Objekt erzeugt. Aber
Code:
new Thread( new Runnable1() ).start()
wäre völlig okay.
 
Danke an alle. Hat mir soweit erstamal weitergeholfen.
 
Danke für die Beiträge, hat mir in der Hinsicht schon weitergeholfen. Aber wie ist es leider immer. Ist ein Problem gelöst kommt das nächste.

Ich hab folgenden Quellcode geschrieben, aber so läuft es nicht. Kann mir jemand sagen, was ich anders machen muss?

Code:
 public void onCreate() {
   
     throws InterruptedException {
          new MyService().process();
     }
  
 public void porcess() throws InterruptedExeprion {
      Thread t1 = new Thread1 ();
      t1.start();
 }
  
 while(true) {
  
   // Berechnung der Primzahlen
  
 }
 
Zuletzt bearbeitet von einem Moderator:
Formatierung:confused2::confused2:
 
Schon Eratosthenes kannte effektivere Wege, Primzahlen zu berechnen: Sieb des Eratosthenes

Und es wäre auch interessant zu wissen, was genau nicht funktioniert.
 
Die Berechnung der Primzahlen hab ich. Es zeigt mir nur einen Fehler bei throws InterruptedException an. In der Fehlermeldung steht nur "Syntax error on token "throws", Interface expected"
Ich kann damit nur nichts anfangen.
 
Versuch's mit
Code:
public void onCreate() throws InterruptedException {
    new MyService().process();
}
(du hast da eine {-Klammer zuviel und ich nehme an das "public void porcess()" ist ein Tippfehler hier)
 
... und bei InterruptedEception ist auch nen Typo ...
 
Thyrion schrieb:
Versuch's mit
Code:
public void onCreate() throws InterruptedException {
    new MyService().process();
}
(du hast da eine {-Klammer zuviel und ich nehme an das "public void porcess()" ist ein Tippfehler hier)

so hab ich nur nochmehr Fehlermeldungen
 
Oh man... was treibst du da?

Java Grundlagen kannste oder? Gerade Exception-Handling?

lg. Dagobert
 
Werde das Gefühl nicht los, was wir gerade seine Hausaufgaben machen. :unsure:
 

Ähnliche Themen

W
  • waltsoft
Antworten
3
Aufrufe
723
waltsoft
W
W
  • waltsoft
Antworten
4
Aufrufe
942
waltsoft
W
znieh99
  • znieh99
Antworten
1
Aufrufe
1.018
znieh99
znieh99
Zurück
Oben Unten