Android 線程管理

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章