zoukankan      html  css  js  c++  java
  • android_线

    说明:android螺纹。

    android无非就是一个线程Main Thread和Worker Thread。(除了主线程Main Thread是Worker Thread)

    Main Thread 也叫UI Thread 。绝大部分的UI 代码都执行在主线程的。

    Worker Thread 通常完毕耗时较长、会产生堵塞的操作,比如訪问网络、进行大量IO的读写。

    接下来用几个样例来说明一下。

    样例:

    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。在Worker Thread里面改动UI(改动ProgressBar的属性)。

    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其中。

    欢迎交流 http://blog.csdn.net/ycwol/article/details/39900371

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    自己动手编译apache-tomcat-6.0.41-src源码
    搭建Tomcat6源代码阅读环境
    Windows CMD下一些有用的命令
    windows server域的概念以及wmic(centos上命令)
    C++虚函数的实现机制示例
    通过j-interop访问WMI实例代码
    C++虚函数示例
    创建一个Windows窗体
    UNICODE字符集(20140520)
    windows程序设计笔记
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4725260.html
Copyright © 2011-2022 走看看