Androidスレッド管理
Androidプログラムのメインスレッド(UIスレッド)は時間のかかるコードを走ることができないので、http、ftp、mail、socketなど、UIに関係のないさまざまな操作をサブスレッドに置くのが良い習慣です.UIスレッド(Activityマスタークラス)の操作を容易にするために、サブスレッドをActivityマスタークラスの内部クラスに書くのは手間が省ける方法です.
インスタンスコード:
Archer_runnable()は、プライマリクラスのMessageおよびbundleを直接使用してプライマリクラスにメッセージを送信したり、プライマリクラスで定義された他の方法を使用したりすることができます.
インスタンスコード:
Archer_runnable()は、プライマリクラスのMessageおよびbundleを直接使用してプライマリクラスにメッセージを送信したり、プライマリクラスで定義された他の方法を使用したりすることができます.
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.widget.Toast;
public class MainActivity extends Activity {
private Thread Archer_Thread;
// ------------------------------------
private Message msg;
private Bundle bundle;
private StringBuilder sb_contact;
// ------------------------------------
public MainActivity() {
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button bn_Ballista = (Button) this.findViewById(R.id.button_Ballista);
bn_Ballista.setOnClickListener(new BallistaListener());
Archer_Thread = new Thread(Archer_runnable);
Archer_Thread.start();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public Handler mHandler = new Handler() {
String str_tmp;
public void handleMessage(Message msg) {
switch (msg.what) {
case 0x12: {
str_tmp = msg.getData().getString("result");
Toast.makeText(MainActivity.this, "...", Toast.LENGTH_SHORT)
.show();
break;
}
default:
break;
}
}
};
Runnable Archer_runnable = new Runnable() {
public void run() {
sb_contact = new StringBuilder("contact: ");
msg = new Message();
bundle = new Bundle();
// /-----------------------------------------
msg.what = 0x12;
bundle.putString("result", sb_contact.toString());
msg.setData(bundle);
mHandler.sendMessage(msg);
}
};
}