您现在的位置是:首页 > 正文

android线,android_线

2024-01-30 21:31:35阅读 0

说明: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)

SouthEast

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);

}

}

}

}执行结果:成功。

4eb74057ca4af4c310422efd8efb8f01.png

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);

//}

//}

//}

}执行结果:如图。

da673a1179ac988553bb1de91eadd51b.png

在一个应用程序其中。主线程通经常使用于接收用户的输入,以及将运算的结果反馈给用户,所以说,对于一些堵塞的操作。必须放置在Worker Thread其中。

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

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

网站文章

  • HMM与CRF模型的使用过程存在哪些差异?

    HMM与CRF模型的使用过程存在哪些差异?

    训练后, 我们就得到了具备预测能力的新模型: lambda = CRF(w1, w2, ..., wn), 其中的模型参数已经改变.之后给定输入序列(x1, x2, ..., xn), 经过模型计算l...

    2024-01-30 21:31:28
  • Java读取文件为字符串】使用Java编程读取文件内容并将其作为字符串进行处理

    在Java中,读取文件内容需要使用文件输入流(FileInputStream)和缓冲区输入流(BufferedReader)。这是一个简单的示例,展示了如何使用Java读取文件并将其作为字符串进行处理...

    2024-01-30 21:31:21
  • flash制作车轮转动的汽车沿着路径走的动画

    flash制作车轮转动的汽车沿着路径走的动画

    二维动画制作实验报告一.实验目的1.掌握动画的概念。2.熟练Flash的界面。3.掌握Flash界面中各组成元素和功能。二.实验工具    Flash三.实验要求制作车轮转动的汽车沿着路径走。四.实验...

    2024-01-30 21:30:51
  • lattice-arc-post计算边上累计得分

    lattice-arc-post计算边上累计得分

    1 模型预测产生lat.1.gz这里请参考理解lattice,这里有介绍解码过程中如何产生lattice内容文件,以及lattice内容分析。2 边上累计得分gunzip -c 20200921.la...

    2024-01-30 21:30:45
  • CppCMS和Nginx协同工作

    为什么需要NginxCppCMS自己已经支持Http访问,为什么还需要Nginx.一些原因是我们需要动态负载平衡,还有原因是安全问题。下面的文字来自于CppCMS站点。CppCMS provides basic implementation of HTTP protocol and thus it can run behind reverse HTTP Proxy. But this o...

    2024-01-30 21:30:38
  • 12-Oracle包的定义与使用

    本章内容 1.包概述 2.包的创建 3.包的调用 4.包重载 5.包的初始化 6.包的持续性 7.包的串行化 8.包的管理

    2024-01-30 21:30:10
  • 面试篇--网络通信

    面试篇--网络通信

    目录【前言】【TCP三次握手】在TCP/IP协议中,TCP协议提供可靠的连接服务,采用 三次握手建立一个连接.1.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEN...

    2024-01-30 21:30:03
  • 阿里面试题

    阿里面试题

    阿里面试题文章目录阿里面试题JDK、JRE、JVM之间的区别hashCode()与equals()之间的关系String、StringBuffer、StringBuilder的区别泛型中extends...

    2024-01-30 21:29:48
  • leecode 450. 删除二叉搜索树中的节点

    leecode 450. 删除二叉搜索树中的节点

    450. 删除二叉搜索树中的节点 本题是删除搜索树中的指定值,和添加值比,却复杂很多,但是本题的具体逻辑我竟然能自己慢慢实现出来,第一次感觉到对递归理解加深了。/** * Definition ...

    2024-01-30 21:29:17
  • 图片的黑魔法——GitHub 热点速览 v.21.13

    图片的黑魔法——GitHub 热点速览 v.21.13

    作者:HelloGitHub-小鱼干图片的黑魔法并不是图片修复、旧照上色,而是将任意文件打包成图片的样子,上传到推特。看过去这张图片平平无奇,那么普通却深藏不露,工程师 DavidBuch...

    2024-01-30 21:29:09