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); } }; }