Android程序的主线程(UI线程)无法跑有时间耗费的代码,所以一个好习惯是将各种与UI无关的操作,比如网络通信(包括http、ftp、mail、socket)、文件操作、数值计算等放在子线程中。为了方便操作UI线程(Activity主类)中的各种方法和变量,将子线程写成Activity主类中的内部类是个较省事的方式。
实例代码:
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);
}
};
}