Looper物件のキャラクター(Demo 5)


この例もDemo 4のもう一つの実現方法であり、比較学習することができます.

package com.example.Looper_05;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Looper_05 extends Activity implements OnClickListener {
	private final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
	private final int FP = LinearLayout.LayoutParams.FILL_PARENT;
	public TextView tv;
	private RR r;
	private Button btn, btn2;
	private Handler h;
	private Context ctx;

	public void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		ctx = this;
		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);
		btn = new Button(this);
		btn.setId(101);
		btn.setBackgroundResource(R.drawable.icon);
		btn.setText("test looper");
		btn.setOnClickListener(this);
		LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(100, 50);
		param.topMargin = 10;
		layout.addView(btn, param);
		btn2 = new Button(this);
		btn2.setId(102);
		btn2.setBackgroundResource(R.drawable.icon);
		btn2.setText("exit");
		btn2.setOnClickListener(this);
		layout.addView(btn2, param);
		tv = new TextView(this);
		tv.setTextColor(Color.WHITE);
		tv.setText("");
		LinearLayout.LayoutParams param2 = new LinearLayout.LayoutParams(FP, WC);
		param2.topMargin = 10;
		layout.addView(tv, param2);
		setContentView(layout);
		// ------------------------
		r = new RR();
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case 101:
			String obj = "mainThread";
			Message m = h.obtainMessage(1, 1, 1, obj);
			h.sendMessage(m);
			break;
		case 102:
			h.getLooper().quit();
			finish();
			break;
		}
	}

	// ------------------------------------------------
	public class EventHandler extends Handler {
		public EventHandler(Looper looper) {
			super(looper);
		}

		@Override
		public void handleMessage(Message msg) {
			((Activity) ctx).setTitle((String) msg.obj);
		}
	}

	// ------------------------------------------------
	public class RR implements Runnable {
		public RR() {
			Thread aThread = new Thread(null, this, "RR");
			aThread.start();
		}

		public void run() {
			Looper.prepare();
			h = new Handler() {
				public void handleMessage(Message msg) {
					EventHandler ha = new EventHandler(Looper.getMainLooper());
					String obj = (String) msg.obj + ", myThread";
					Message m = ha.obtainMessage(1, 1, 1, obj);
					ha.sendMessage(m);
				}
			};
			Looper.loop();
		}
	}	
}