`

用Android线程做一个简单的计数器

 
阅读更多

2016.10.4

 

上课类容:Android线程

 

什么是线程?

线程或者线程执行本质上就是一串命令(也是程序代码),然后我们把它发送给操作系统执行。

一般来说,我们的CPU在任何时候一个核只能处理一个线程。多核处理器(目前大多数Android设备已经都是多核)顾名思义,就是可以同时处理多线程(通俗地讲就是可以同时处理多件事)。

多核处理与单核多任务处理的实质

上面我说的是一般情况,并不是所有的描述都是一定正确的。因为单核也可以用多任务模拟出多线程。

每个运行在线程中的任务都可以分解成多条指令,而且这些指令不用同时执行。所以,单核设备可以首先切换到线程1去执行指令1A,然后切换到线程2去执行指令2A,接着返回到线程1再去执行1B、1C、1D,然后继续切换到线程2,执行2B、2C等等,以此类推。

这个线程之间的切换十分迅速,以至于在单核的设备中也会发生。几乎所有的线程都在相同的时间内进行任务处理。其实,这都是因为速度太快造成的假象,就像电影《黑客帝国》里的特工Brown一样,可以变幻出很多的头和手。

 

在学习java的时候,我们接触过线程,知道线程的创建有以下两种。

一:

Android中有两种实现线程thread的方法:

一种是,扩展Java.lang.Thread类 
另一种是,实现Runnable接口

二:
Thread类代表线程类,它的两个最主要的方法是: 
run()——包含线程运行时所执行的代码 
Start()——用于启动线程

Android中的线程和java基本差不多,但是也有区别。

如果我们像java那样使用,就会报错。

我们定义两个类,

例:

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView tv =(TextView)this.findViewById(R.id.textView1);
        Counter c = new Counter(tv);
        //启动线程
        c.start();
    }
}

 

import android.util.Log;
import android.widget.TextView;


public class Counter extends Thread{
	
	TextView tv;
    Counter(TextView tv){
		this.tv = tv;
		
	}
	public void run(){
		
		int i=0;
		while(i<=100){
			//调用了TextView组件
			tv.setText(i);
			Log.i("当前的值为:", i+"");
			
		}
		try {
			sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		i++;
	}

}

 如果这样运行,我们发现,模拟器就会报错。

 它需要用到Handler机制。 

Handler 机制,它是Runnable和Activity交互的桥梁,在run方法中发送Message,在Handler里,通过不同的Message执行不同的任务。

Handler的设计实际上是为了应用程序内其他线程和主线程进行通信,因为只有主线程才能更新UI,其他线程不行

例:

import android.os.Handler;
import android.os.Message;
import android.util.Log;

public class Counter extends Thread{
	
	Handler handler;
	public Counter(Handler handler){
		this.handler = handler;
	}
	public void run(){
		int i=0;
		while(i<=100){
			Log.i("当前的值为:", i+"");
			//发送消息
			Message msg = new Message();
			msg.obj = "当前计数:"+i;
			handler.sendMessage(msg);
			try {
				sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			i++;
			}
	}
}

 

import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class CounterHandler extends Handler{
	
	TextView tv;
	CounterHandler(TextView tv){
		this.tv = tv;
	
	}
	/*
	 * 重写处理消息的方法
	 */
	public void handleMessage(Message msg){
		String showInfo = (String)msg.obj;
		tv.setText(showInfo);
	}
}

 

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView tv = this.findViewById(R.id.action_settings);
		Handler handler = new Handler(tv);
		Counter c = new Counter(hander);
		c.start();
		
	}

 

 

分享到:
评论

相关推荐

    Android多线程实现简单字符串计数器

    本示例“Android多线程实现简单字符串计数器”旨在教你如何在Android环境中利用多线程来实现一个简单的字符串计数器功能。 首先,我们需要理解Android中的线程模型。主线程,也称为UI线程,负责处理用户界面的更新...

    Java / Android 基于Http的多线程下载的实现

    2. **创建线程池**:使用`java.util.concurrent.ExecutorService`创建一个线程池,以便管理下载线程。 3. **线程任务**:为每个线程创建一个下载任务,任务包含起始位置、结束位置和目标文件的输出流。在线程中,...

    Android多线程处理

    - 一个专门为处理异步请求而设计的服务,它在后台线程中运行一个工作队列,处理完一个请求后自动停止服务,避免资源浪费。 6. **线程同步和通信**: - `synchronized`关键字:用于保证多线程环境下的数据一致性。...

    Android-拥有漂亮的源码语法高亮Android视图和行计数器可以使用此视图设计自己的IDE

    总之,利用"Badranh-Syntax-View-Android-23e705d"中的资源,结合上述技术,你将能够构建一个具备源码语法高亮和行计数器功能的自定义Android IDE。这是一个挑战性的项目,但完成后将极大提升你的Android开发技能,...

    Android计数器(动态更改屏幕上显示)

    本程序是我写的Android计数器(动态更改屏幕上显示)的一个小程序。大家都知道,在Android中要更改UI中的数据要另外启动一个线程。我就以一个计数器的例子,做了更改textView中的数据的例子。

    多线程通信ThreadDemo

    - **CountDownLatch**:这是一个计数器,可以设置为一个初始值,然后在多个线程中进行递减。当计数器归零时,所有等待的线程都会被释放。 - **CyclicBarrier**:允许一组线程等待彼此到达一个屏障点,然后一起继续...

    android计数器(Handler消息传递机制)

    本项目中,我们看到一个简单的计数器应用,它利用`Handler`来每秒增加文本框中的数字,直到达到100为止。下面我们将深入探讨`Handler`的工作原理及其在计数器应用中的应用。 `Handler`、`Looper`和`MessageQueue`是...

    Android 多线程

    在Android平台上,多线程是实现高性能和流畅用户体验的关键技术之一。尤其是在游戏开发中,由于图形渲染、逻辑处理和用户交互等任务需要同时进行,多线程的应用显得尤为重要。本篇将深入探讨Android多线程的相关知识...

    Android应用程序中多线程应用的方法研究.pdf

    为了更好地管理线程,可以使用Executor框架,比如ThreadPoolExecutor,它可以创建一个线程池,复用线程,避免频繁创建和销毁线程的开销。通过调整线程池的参数,如核心线程数、最大线程数、存活时间等,可以更精细地...

    多线程下载器

    1. **多线程基础**:在计算机科学中,多线程是指在一个程序中执行多个独立的执行流,每个流都有自己的程序计数器、栈和局部变量。这使得程序可以同时进行多个任务,提高处理器的利用率。 2. **Android多线程**:在...

    Android多线程全新讲解[整理].pdf

    **CountDownLatch**(倒计数器)允许一个线程等待其他线程完成操作后再继续执行;**Exchanger**(交换器)则允许两个线程之间交换数据。 最后,`ArrayBlockingQueue`是一种**阻塞队列**,它是一个线程安全的队列,...

    利用 CountDownLatch 类实现线程同步

    `CountDownLatch` 是一个计数器,可以用于协调多个线程间的活动,等待所有线程完成各自的任务后,主线程或其他线程才能继续执行。 首先,让我们深入理解 `CountDownLatch` 的工作原理。`CountDownLatch` 在构造时会...

    Android应用源码之讲多线程的操作方式.zip

    在Android应用开发中,多线程是一个至关重要的概念,它涉及到如何在单个应用程序中同时执行多个任务,以提升用户体验并充分利用系统资源。本资料包"Android应用源码之讲多线程的操作方式.zip"主要关注如何在Android...

    Android-Thread-Test:Android线程测试

    基本信息支持Android API 15-22(无需支持包) 使用3个库Android注释牛油刀记录仪以Realm CI为主题的色彩API 15-20遵循Holo设计API 21-22遵循材料设计使用者介面底部的两个按钮第一的第二计数器的一个textview 它...

    Android Handler机制解析

    线程自己基本上不拥有系统资源,只拥有一点在运行中不可少的资源(如程序计数器、栈),但是它可与同属一个进程的其他线程共享进程所拥有的全部资源。 二、Android线程的实现 Android线程,一般地就是指Android...

    MulThreadSQLiteTest多线程操作数据库

    5. **线程通信与同步**:当多个线程需要协作完成一个任务,例如共享结果集或通知其他线程操作已完成时,可以使用Java的synchronized关键字、Semaphore信号量、CountDownLatch计数器等同步工具。 6. **性能优化**:...

    火山安卓多线程技术源码.rar

    - **Looper**:主线程默认有一个Looper,负责消息的循环接收。 - **Message**:承载数据的对象,通过Handler发送到消息队列。 4. **IntentService** - Android系统提供的服务类,用于执行单一的后台任务,任务...

    Android第一行代码源码 AndroidThreadTest.rar

    在Android开发中,多线程是至关重要的一个概念,它使得应用程序可以同时执行多个任务,提升用户体验并优化系统资源的使用。"Android第一行代码源码 AndroidThreadTest.rar" 是一个压缩包,其中包含了用于学习和理解...

    安卓进度条loadingprogress相关-一个类似Google健身的环形计数器.rar

    在本压缩包“一个类似Google健身的环形计数器.rar”中,我们可能找到了一个模仿Google健身应用中的环形进度条实现。Google健身应用中的环形计数器是一种动态展示数据和进度的视觉效果,它以环形的方式显示目标完成度...

    创建线程式-多线程学习

    在IT行业中,多线程是程序设计中的一个重要概念,尤其在现代高性能计算和并发处理中不可或缺。本资源“创建线程式-多线程学习”旨在帮助我们深入理解并掌握多线程技术。多线程允许一个应用程序同时执行多个任务,...

Global site tag (gtag.js) - Google Analytics