編輯:關於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越來越普及,那已經安裝的應用要如何更新呢?在應用市場中常會有顯示某某應用已經更新之類的信息,那我們是否也可以實現類似的功能呢?如果要實現又要做
import android.content.Context; import android.graphics.Bitmap; import android.grap
Android Activity生命周期以及onSaveInstanceState、onRestoreInstanceState要點備忘 一般的,當
Android RadioButton 圖片位置與大小Java:rgGroup = (RadioGroup) findViewById(R.id.re_group);