Korrekte (sinvolle) Nutzung von Handlern

R

robthemobb

Neues Mitglied
0
Hallo Zusammen,

ich habe mir eben bzgl. Handler Gedanken gemacht, ob und wie ich diese sinnvoll nutzen kann. Dazu habe ich mir erst einmal ein kleines, eher sinnloses, Beispiel geschrieben. (Eine Klasse addiert random-Zahlen und via Handler Rückgabe, ob ==, < oder > Zero) Dies funktioniert auch!

Eventuell könnt ihr euch das mal anschauen und euren Gedanken freien Lauf lassen. Mir geht es darum, zu verstehen, wann und wie ich Handler nutze.

Ganz konkret habe ich vor so einen Fahrradcomputer zu basteln. Dieser besteht momentan aus 2 Tabs (Map / Daten). Im Daten-Tab sollen dann die GPS Coordinaten aus dem MapTab dazu benutzt werden, Geschwindigkeiten zu berechnen. Das wäre doch sinnvoll, hier handler zu benutzen, oder!?

Gruß, Rob

Code:
package test.test;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
 
public class Main extends Activity {
	
	private Adder adder;
	public static final int RESULT = 3;
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}
	
	public void onStart() {
		super.onStart();
		setUpAdder();
		adder.setResult();
	}
	
	private void setUpAdder() {
		try {
			adder = new Adder(this, handler);
		} catch (ExceptionInInitializerError eiie) { }
	}
	
	private final Handler handler = new Handler() {
		public void handleMessage(Message msg) {
			switch(msg.what) {
				case RESULT:
					switch(msg.arg1) {
						case Adder.EQUAL_ZERO:
							((TextView) findViewById(R.id.result)).setText("Result is Zero");
							break;
						case Adder.BIGGER_ZERO:
							((TextView) findViewById(R.id.result)).setText("Result is > Zero");
							break;
						case Adder.LESS_ZERO:
							((TextView) findViewById(R.id.result)).setText("Result is < Zero");
							break;
						default:
							break;
					}
			}
		}
	};
}

Code:
package test.test;

import android.content.Context;
import android.os.Handler;

public class Adder {
	
	private final Handler handler;

	public static final int EQUAL_ZERO = 0;
	public static final int BIGGER_ZERO = 1;
	public static final int LESS_ZERO = -1;
	
	private int result;
	
	public Adder(Context c, Handler h) { handler = h; }
	
	public void setResult() {
		int a = (int) (Math.random() * 10);
		int b = (int) (Math.random() * -10);
		
		if(a+b < 0) {
			result = -1;
		} else if(a+b == 0) {
			result = 0;
		} else {
			result = 1;
		}
		
		handler.obtainMessage(Main.RESULT, result, 0).sendToTarget();
	}
}
 
Handler sind ganz nützlich um aus einem Thread den Befehl zu geben die GUI zu ändern. Ist aus dem Thread nicht möglich.
Zudem eignen sie sich um Befehle in 10s auszuführen. Man kann das natürlich auch mit "Runnables" machen.
Es gibt recht viele Einsatzmöglichkeiten.
 

Ähnliche Themen

S
Antworten
17
Aufrufe
555
jogimuc
J
5
Antworten
22
Aufrufe
1.422
590239
5
M
Antworten
4
Aufrufe
1.173
swa00
swa00
Zurück
Oben Unten