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

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

  • 相关阅读:
    Android AHandle AMessage
    android java 与C 通过 JNI双向通信
    android 系统给应用的jar
    UE4 unreliable 同步问题
    UE4 difference between servertravel and openlevel(多人游戏的关卡切换)
    UE4 Run On owing Client解析(RPC测试)
    UE4 TSubclassOf VS Native Pointer
    UE4 内容示例网络同步Learn
    UE4 多人FPS VR游戏制作笔记
    UE4 分层材质 Layerd Materials
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4725260.html
Copyright © 2011-2022 走看看