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

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯VIP基础练习 矩形面积交
    Java实现 蓝桥杯VIP 基础练习 完美的代价
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    Java实现 蓝桥杯 蓝桥杯VIP 基础练习 数的读法
    核心思想:想清楚自己创业的目的(如果你没有自信提供一种更好的产品或服务,那就别做了,比如IM 电商 搜索)
    在Linux中如何利用backtrace信息解决问题
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4725260.html
Copyright © 2011-2022 走看看