1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Korrekte (sinvolle) Nutzung von Handlern

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von robthemobb, 12.10.2010.

  1. robthemobb, 12.10.2010 #1
    robthemobb

    robthemobb Threadstarter Neuer Benutzer

    Beiträge:
    2
    Erhaltene Danke:
    0
    Registriert seit:
    01.09.2010
    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();
    	}
    }
     
  2. manu, 25.10.2010 #2
    manu

    manu Fortgeschrittenes Mitglied

    Beiträge:
    329
    Erhaltene Danke:
    25
    Registriert seit:
    29.03.2009
    Phone:
    Galaxy Nexus
    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.
     

Diese Seite empfehlen