Artur Zimner
- Forum-Beiträge: 2
16.11.2011, 21:15:23 via Website
16.11.2011 21:15:23 via Website
hi bin neu hier und auch in der android bzw. java welt, probier gerade mein erstes app zu proggen. nachdem ich mit den grundlagen gut zurecht kamm hänge ich trotz google und co seit ein paar tagen an einem problem, ich hoffe ich kann es detailiert genug beschreiben. ich fang einfach mal an
ich möchte einen timer schreiben der sekündlich eine zahl hochsetzt. ist die zahl bei z.b. 100 soll ein alarm klingeln. das mache ich auf folgenden weg:
- activity wird gestartet
- timer steht bei 0
- play button wird geklickt und timer startet mit fogendem code
in meiner klasse habe ich noch fogendes:
beim klick auf den play button wird dieser zum pause button und beim klick auf pause rufe ich folgendes auf.
das funktioniert auch alles wunderbar. wenn da nicht die zustände wären die so ein gerät einnehmen kann.
wenn die activity überlagert wird von einem telefonanruf oder so oder wenn ich die home tase drücke(nicht die zurück taste) soll der timer im hintergrund weiterlaufen was er auch von natur aus tut. wenn die activty wieder im vordergund ist hole ich mir die alten werte mit
und setzt die werte wieder.
leider wird die gui nicht mehr sekündlich upgedatet.
ich muß erst wieder in der onRestore methode
TAG TEXT
counrer 15
counter 27
counter 16
counter 28
counter 17
counter 29
usw.
wenn ich drei anrufe in der zeit erhalte oder den bildschirt mehrmals drehe habe ich auch schon mal 3 bis 9 instanzen in der Logcat die mir alle den tag counter ausspucken.
ausserdem klingelt der alarm zwar auch bei 100 aber im hintergrund beliebig oft.
wenn ich in der
das removeCallback aufrufe habe ich nie mehr als eine instanz im logcat
ich frage mich ob ich überhaupt den richtigen lösungsansatz wähle.
hoffe habe mich verständlich ausgedrückt und jemand von euch kann mir weiterhelfen
egal was passier es soll auch im hintergrund nur einmal runnable ausgeführt werden.
ich möchte einen timer schreiben der sekündlich eine zahl hochsetzt. ist die zahl bei z.b. 100 soll ein alarm klingeln. das mache ich auf folgenden weg:
- activity wird gestartet
- timer steht bei 0
- play button wird geklickt und timer startet mit fogendem code
1handler.postDelayed(runnable, intervall);
in meiner klasse habe ich noch fogendes:
1private Runnable runnable = new Runnable() {
2 @Override
3 public void run() {
4 countClock();
5 handler.postDelayed(this, intervall);
6
7 }
8 };
2 @Override
3 public void run() {
4 countClock();
5 handler.postDelayed(this, intervall);
6
7 }
8 };
beim klick auf den play button wird dieser zum pause button und beim klick auf pause rufe ich folgendes auf.
1handler.removeCallbacks(runnable);
das funktioniert auch alles wunderbar. wenn da nicht die zustände wären die so ein gerät einnehmen kann.
wenn die activity überlagert wird von einem telefonanruf oder so oder wenn ich die home tase drücke(nicht die zurück taste) soll der timer im hintergrund weiterlaufen was er auch von natur aus tut. wenn die activty wieder im vordergund ist hole ich mir die alten werte mit
1onRestoreInstanceState(Bundle savedInstanceState)
und setzt die werte wieder.
leider wird die gui nicht mehr sekündlich upgedatet.
ich muß erst wieder in der onRestore methode
1handler.removeCallbacks(runnable);
2 handler.postDelayed(runnable, 1000);
ausführen damit die gui wieder sekündlich upgedatet wird. das problem ist der removeCallback funktioniert nicht.ich habe das gefühl das runnable zu dem zeitpunkt eine neue instant ist und removeCallback nicht weiß was er killen soll. zwar wird der timer wieder richtig hochgezählt aber irgendwie wird die alte runnable instanz nicht gekillt. das sehe ich einerseitst in der Logcat. da lasse ich mir die nächste zahl immer ausgegben, diese sieht dann so aus2 handler.postDelayed(runnable, 1000);
TAG TEXT
counrer 15
counter 27
counter 16
counter 28
counter 17
counter 29
usw.
wenn ich drei anrufe in der zeit erhalte oder den bildschirt mehrmals drehe habe ich auch schon mal 3 bis 9 instanzen in der Logcat die mir alle den tag counter ausspucken.
ausserdem klingelt der alarm zwar auch bei 100 aber im hintergrund beliebig oft.
wenn ich in der
1onSaveInstanceState(Bundle outState)
das removeCallback aufrufe habe ich nie mehr als eine instanz im logcat
ich frage mich ob ich überhaupt den richtigen lösungsansatz wähle.
hoffe habe mich verständlich ausgedrückt und jemand von euch kann mir weiterhelfen
egal was passier es soll auch im hintergrund nur einmal runnable ausgeführt werden.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.