編輯:關於Android編程
說明:android的線程使用。android的線程無非就是Main Thread和Worker Thread。(除了主線程Main Thread之外的其他線程都是Worker Thread)
Main Thread 也叫UI Thread ,絕大部分的UI 代碼都運行在主線程的。接下來用幾個例子來說明一下。
例子:
1、用戶點擊Button,開啟新的Worker Thread,在Worker Thread裡面修改UI(修改TextView的屬性)。
package com.example.b_05_thread01;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId);
button.setOnClickListener(new ButtonListener());
}
class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
Thread t = new MyThread();
t.start();
}
}
// Worker Thread
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i <= 100; i++) {
try {
Thread.sleep(1 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
textView.setText("來自於線程的修改"); // 程序會報錯,因為只能在主線程中修改ui。
}
}
}
}
運行結果:程序會報錯,因為在主線程之外,原則上是不能修改ui的屬性。(也有例外,例如ProgressBar)

2、用戶點擊Button,開啟新的Worker Thread,在WZ喎?/kf/ware/vc/" target="_blank" class="keylink">vcmtlciBUaHJlYWTA78Pm0N64xFVJo6jQ3rjEUHJvZ3Jlc3NCYXK1xMr00NSjqaGjPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">package com.example.b_05_thread01; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; public class MainActivity extends Activity { private TextView textView; private Button button; private ProgressBar proBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textViewId); button = (Button) findViewById(R.id.buttonId); proBar = (ProgressBar) findViewById(R.id.proBarId); button.setOnClickListener(new ButtonListener()); } class ButtonListener implements OnClickListener { @Override public void onClick(View v) { Thread t = new MyThread(); t.start(); } } // Worker Thread class MyThread extends Thread { @Override public void run() { for (int i = 0; i <= 100; i++) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } proBar.setProgress(proBar.getProgress() + 1); } } } } 運行結果:成功。

3、既然在Worker Thread裡面不能修改UI,那麼就不需要Worker Thread,所有的事情在Main Thread裡面操作,行不行呢? 答案是不行的!
當用戶點擊Button,不開啟新的線程,直接在Main Thread裡面休眠。
package com.example.b_05_thread01;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView textView;
private Button button;
private ProgressBar proBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.textViewId);
button = (Button) findViewById(R.id.buttonId);
proBar = (ProgressBar) findViewById(R.id.proBarId);
button.setOnClickListener(new ButtonListener());
}
// 在一個應用程序當中,主線程通常用於接收用戶的輸入,以及將運算的結果反饋給用戶
// 所以說,對於一些阻塞的操作,必須放置在Worker Thread當中
class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
try {
Thread.sleep(5 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Thread t = new MyThread();
// t.start();
}
}
// // Worker Thread
// class MyThread extends Thread {
// @Override
// public void run() {
// for (int i = 0; i <= 100; i++) {
// try {
// Thread.sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// proBar.setProgress(proBar.getProgress() + 1);
// }
// }
// }
}運行結果:如圖。

在一個應用程序當中,主線程通常用於接收用戶的輸入,以及將運算的結果反饋給用戶,所以說,對於一些阻塞的操作,必須放置在Worker Thread當中。
捨長晚安。。。
Android基於IIS的APK下載(一)自定義更新控件
Android越來越普及,那已經安裝的應用要如何更新呢?在應用市場中常會有顯示某某應用已經更新之類的信息,那我們是否也可以實現類似的功能呢?如果要實現又要做
Android簡易畫板
import android.content.Context; import android.graphics.Bitmap; import android.grap
Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要點備忘
Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要點備忘 一般的,當
Android RadioButton 圖片位置與大小實例詳解
Android RadioButton 圖片位置與大小Java:rgGroup = (RadioGroup) findViewById(R.id.re_group);