Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 反糾結app開發: 在線程中更新view

android 反糾結app開發: 在線程中更新view

編輯:關於Android編程


大體上想實現一個思路:

對一個view 的內容進行不停地變化, 通過按鈕停止這種變化,以達到隨機選擇的目的.


開發過程中 使用textview 模擬, 建立線程

mythread = new Thread()

{

@Override

public void run()

{

while(isrun)

{

改變textview

}

}

}

結果遭遇報錯 Only the original thread that created a view hierarchy can touch its views


通過在網上查閱大量資料, 得知android 的view 和相關控件不是線程安全的,不可以在線程中直接改變.


這種情況下 需要使用handle .


通過Handler更新UI實例:

步驟:

1、創建Handler對象(此處創建於主線程中便於更新UI)。

2、構建Runnable對象,在Runnable中更新界面。

3、在子線程的run方法中向UI線程post,runnable對象來更新UI。


在下面的代碼中, 通過變量ab ,不斷更新textview中的內容 ,通過按鈕可以結束線程.


import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;

import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity  {

	private Button button;
	private TextView textview;
	private final int SPLASH_DISPLAY_LENGHT = 1;
	private static int flag = 0;
	private static int count=0;
	private int ab=1;
	private boolean isrun = true;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		button = (Button)findViewById(R.id.button1);
		textview = (TextView)findViewById(R.id.textView1);
		final Handler handler= new Handler();  
		  
		   final Runnable runnable = new Runnable() {  
		        public void run() {  
		            textview.setText(Integer.toString(ab));  
		        }  
		    };  
		  
		
		        
		        
		    final Thread t = new Thread(){
		        	//public boolean isrun=true;
		    	@Override
		            public void run() {  
		            	while(isrun)
		            	{
		                handler.post(runnable); //加入到消息隊列     這樣沒有啟動新的線程,雖然沒有報異常。但仍然阻塞ProgressDialog的顯示  
		                ab++;
		                try {
		                    sleep(1000);                            //直接調用
		                  } catch (InterruptedException e) {
		                    return;
		                  }
		            	}
		            }  
		        };  
		        t.start();  
		        button.setOnClickListener(new Button.OnClickListener()
				{
					@Override
					public void onClick(View view)
					{
						isrun=false;
					}
				});

		 
	}  	
	
	           
}
		



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