Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android線程

Android線程

編輯:關於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當中。

捨長晚安。。。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved