android_线
2015-08-12 18:32
597 查看
说明: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的属性)。
执行结果:程序会报错,由于在主线程之外,原则上是不能改动ui的属性。
(也有例外,比如ProgressBar)
2、用户点击Button,开启新的Worker Thread。在Worker Thread里面改动UI(改动ProgressBar的属性)。
3、既然在Worker Thread里面不能改动UI,那么就不须要Worker Thread。全部的事情在Main Thread里面操作,行不行呢? 答案是不行的!
当用户点击Button,不开启新的线程,直接在Main Thread里面休眠。
在一个应用程序其中。主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户,所以说,对于一些堵塞的操作。必须放置在Worker Thread其中。
欢迎交流 http://blog.csdn.net/ycwol/article/details/39900371
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中获取屏幕的信息
- 使用Genymotion来运行Android Studio开发的程序
- iOS到Android到底有多远
- android 远程服务设计要点
- Windows下部署Appium教程(Android App自动化测试框架搭建)
- Android开发必知--几种不同对话框的实现
- Unable to resolve target 'android-14'
- android 屏幕分辨率总结
- Android获取手机相关信息
- Android获取手机相关信息
- Android 动画效果 及 自定义动画
- Android SDK Manager更新代理配置
- android animation
- android的GPS定位跟踪系统
- 深入浅出 - Android系统移植与平台开发(十)- Android编译系统与定制Android平台系统(瘋耔修改篇二)
- Android自动测试之Monkey工具
- android 中关于String 字符串 format的使用
- 命令行生成android jni头文件方法
- Android使用XUtils框架上传照片(一张或多张)和文本,服务器接收照片和文字(无乱码)
- Android系统优化