Periodische Endlosschleifen

  • Antworten:4
  • Bentwortet
Daniel
  • Forum-Beiträge: 99

03.03.2014, 15:48:10 via Website

Guten Tag erstmal,

ich will bei Android für ein Game ne periodische Wartezeit einbauen, in dem Sinne, dass ein Button setPressed(true) wird und nach 3 sek wieder setPressed(false) werden soll.
Nun habe ich das gesamte Inet abgesucht ob Deutsch ob Englisch und gefunden man kann für solche Sachen : Threads verwenden, die mit nem Handler verbunden(?) sind oder ASyncTask, die aber nur einmal inner App gestartet werden kann.
Ist diese "Handler-Methode" nun richtig, wo man nen Handler mit nem Thread bindet, bei run setPressed(false) reinschreibt und delayed startet, richtig?
Oder gibt es effektivere Methoden?
Ganz ehrlich bei C und C++ war's viel einfacher: Sleep(3000); zack , war's erledigt und jetzt noch Thread eigene Klasse für schreiben und tausend Sachen deklarieren und Handler dazuschreiben, das gibt mir zu denken.
Deswegen frage ich nun, ob es einfachere Mittel für dieses Problem gibt, die ich nicht gefunden habe.

Bin für Antworten offen und dankbar ^^

MfG,
Daniel

Antworten
impjor
  • Forum-Beiträge: 1.793

03.03.2014, 15:51:40 via Website

Handler ist schon das einfachste. Wenn du Thread.currentThread().sleep(3000); verwendest wird deine gesamte App schafen gelegt. Das lässt Android aber nicht zu und bietet dem User an die App vorzeitig zu beenden (ANR = App not responding = App reagiert nicht mehr)

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Daniel

Antworten
Daniel
  • Forum-Beiträge: 99

03.03.2014, 17:31:37 via Website

Ok, habe ich mir gemerkt, dass es die Handler sind.
Ich hab nun folgenden Code :
1package com.example.meingame;
2
3import android.os.Bundle;
4import android.os.Handler;
5import android.widget.ImageButton;
6import android.app.Activity;
7
8public class MainActivity extends Activity{
9 public static ImageButton dreieck;
10 public static ImageButton kreis;
11
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);
17 dreieck = (ImageButton)findViewById(R.id.imageButton1);
18 kreis = (ImageButton)findViewById(R.id.imageButton2);
19 dreieck.setPressed(true);
20 kreis.setPressed(false);
21
22 Handler handler = new Handler();
23 handler.postDelayed(runnable, 500);
24
25 }
26 public Runnable runnable = new Runnable(){
27 @Override
28 public void run() {
29 dreieck.setPressed(false);
30 kreis.setPressed(true);
31 handler.postDelayed(runnable,500);
32 }
33
34 };
35}

Laut einer Online Anleitung müsste es funzen, aber der kann die handler beim handler.postDelayed im run() nicht resolven, obwohls in der online Anleitung ging, was muss ich ändern?
Ich will im Prinzip, dass es sich in Intervallen selber startet ^^

— geändert am 03.03.2014, 17:32:06

Antworten
impjor
  • Forum-Beiträge: 1.793

03.03.2014, 20:00:51 via Website

Du deklarierst die Variable handle innerhalb einer Funktion. D.h. sie ist nur innerhalb dieser Funktion verwendbar. Stattdessen muss du den Handler (wie auch die ImageButton dreieck und kreis) innerhalb der Activity deklarieren.

Warum sind bei dir dreieck und kreis static Variablen?

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Daniel
  • Forum-Beiträge: 99

03.03.2014, 20:34:18 via Website

Die sind static, weil ich tausend Sachen durchprobiert habe :D

Achsooooo, danke, dachte Objekte erzeugen mit new, kann man nicht außer der Funktion, dachte bei Variablendeklaration am Anfang der Klasse, geht nur höchstens Handler handler; , aber gleich mit new ist mir new ... Wortwitz Ansonsten läufts, danke. :)

Antworten