`
liguanyi11111
  • 浏览: 62519 次
  • 性别: Icon_minigender_1
  • 来自: 黑龙江
社区版块
存档分类
最新评论

Android线程的一些问题

 
阅读更多

          由于刚刚接触android还不是完全了解其内部机制,但是其毕竟是使用java开发,所以对于语言格式还是基本没有太大的区别,多的只是一些配置文件等等。但是关于线程这方面,却有一些区别。大家都知道,android是linux上的操作系统,后期才被移植到手机上。每当程序启动,会启动一个进程表示程序本身,然后一个线程即主线程执行一定任务。在内存不足时,android会自动释放一些低级进程(对于进程等级,android本身有其自己的算法,普通情况从高到低为 前台进程>可见进程>服务进程>后台进程>空进程)。

           对于android的线程,首先先了解其单线程模型。在android中,其启动的主线程负责UI界面的控制与处理如点击事件、画图操作等等,并且不允许其他线程使用或更改UI界面。总之:“在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行”。如果幕后的线程来执行UI对象,Android就会发出错误讯息 CalledFromWrongThreadException。这样如果以后遇到此问题就可以检查一下线程是否违反了原则。
      但是当主线程想要借助其他线程处理UI或者绘制图像就出现了一定问题。为了解决类似的问题,Android设计了一个Message Queue(消息队列), 线程间可以通过该 Message Queue 并结合Handler和Looper组件进行信息交换。Message类:线程之间用来通信的对象。   Handler类:就是message的主要处理者可以在一个线程的run方法中调用handler对象的 postMessage或sendMessage方法来实现,Android程序内部维护着一个消息队列,会轮训处理这些,如果你是Win32程序员可以很好理解这些消息处理,不过相对于Android来说没有提供 PreTranslateMessage这些干涉内部的方法。   Looper类:其实Android中每一个Thread都跟着一个Looper,Looper可以帮助Thread维护一个消息队列,并可以与一个handler绑定,来实现一个线程同步机制。其实听起来很复杂,但是实际在操作上其实很容易理解。由于我也是初学,没有深入理解。 所以这里也就简单说一下他们的使用方法。简单来说你想让那个线程执行代码,例如让主线程实现UI界面的操作,就获取主线程的looper。然后创建一个你自己的handle类绑定这个looper。代码如下:
               ......
               Looper looper=Looper.myLooper();
	       final MyHandler myhandle = new MyHandler(looper);
                .......

class MyHandler extends Handler{
		public MyHandler(Looper looper){
			super(looper);
		}
		
		public void handleMessage(Message message){
			................
		}
	}
 这样绑定好之后,当有其他线程调用handler的sendmessage方法的时候,就会告知handle类的中继承的handleMessage方法执行相应代码。类似一个生产者消费者模型。由于handle是在主线程中执行的handleMessage方法,所以就不存在上述CalledFromWrongThreadException错误了。
            new Thread(){
			public void run(){
				while(true){
					Message message=Message.obtain();
					myhandle.sendMessage(message);
					} 
				}
			}
		}.start();
 用其他线程通知当前线程执行代码,然后用message来传递信息。Android线程的使用就是如此简单。

     

 

 

分享到:
评论

相关推荐

    Android线程结束——合理的结束你想结束的线程

    总结,结束Android线程时,关键在于优雅、安全地中断操作,而不是简单粗暴地停止。合理的线程管理可以提升用户体验,避免ANR,并保持应用程序的稳定运行。正确使用Thread、AsyncTask、Handler和Looper等工具,结合...

    浅谈android线程模型

    ### 浅谈Android线程模型:深入理解与实践 #### 引言 随着智能手机的普及和技术的不断进步,Google的Android操作系统成为了移动设备领域的重要力量。Android不仅为用户提供了丰富的功能,也为开发者提供了广阔的...

    android 线程之间通过Handler发送消息

    首先,理解Android线程模型至关重要。Android应用的主要工作线程被称为UI线程或主线程,它负责处理用户界面的更新和事件响应。后台线程通常用于执行耗时任务,避免阻塞UI线程。为了在后台线程和主线程之间交换数据和...

    Android开发中的多线程编程技术

    在Android应用开发中,多线程技术是必不可少的,它能帮助开发者实现高效的代码执行,提升用户体验,并确保应用程序的响应性。本资源包主要聚焦于Android平台上的多线程编程,包括理论概念、最佳实践以及实际应用案例...

    Android多线程文件上传

    在Android应用开发中,文件上传是一项常见的任务,尤其是在处理大文件或者需要提高用户交互体验时,多线程技术显得尤为重要。本主题聚焦于"Android多线程文件上传",我们将探讨如何利用多线程技术来优化文件上传过程...

    Android线程间通信的Message机制

    Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制Android线程间通信的Message机制

    android 线程暂停/恢复/退出demo

    在Android开发中,多线程是必不可少的一部分,特别是在处理耗时任务时,如网络请求、数据库操作或大计算量的任务。...通过实践这个“android 线程暂停/恢复/退出demo”,开发者可以加深对Android线程管理的理解。

    android 线程间通讯

    在Android系统中,线程间通信(Inter-Thread Communication,简称ITC)是应用程序开发中的重要环节,尤其在处理耗时操作或者优化UI性能时显得至关重要。线程间通信允许不同线程之间交换数据和执行任务,以确保主线程...

    从现实生活中理解android 线程消息机制

    在Android系统中,线程消息机制是一个核心概念,它确保了应用程序的高效运行和用户体验的流畅性。这个机制主要由三部分组成:Handler、Looper和Message Queue。下面我们将从现实生活中的例子来深入理解这个机制,并...

    android多线程管理

    在Android开发中,多线程管理是至关重要的技术,它涉及到应用的性能、用户体验以及资源的有效利用。Android系统默认在主线程(UI线程)执行所有的用户交互,如果在这个线程中执行耗时操作,会导致应用程序无响应...

    Android 中三种启用线程的方法总结

    首先说明Android的CPU分配的最小单元是线程,Handler一般是在某个线程里创建的,因而Handler和Thread就是相互绑定的,一一对应。 而Runnable是一个接口,Thread是Runnable的子类。所以说,他俩都算一个进程。 ...

    Android多线程分段下载源码

    分段下载则将大文件分割成多个小块,每个线程负责下载一个或多个小块,这样即使网络出现问题,也只需要重试相应的小块,提高了下载的可靠性。 在这个实例中,`DemoDownloadThread`可能是类名,表示一个用于下载的...

    Delphi XE5例子中的一个Android线程使用的代码AnonymousThread.rar

    在Delphi XE5开发环境中,Android应用程序的多线程编程是提高应用性能和响应性的重要手段。这个名为"AnonymousThread"的示例项目旨在教你如何在Android平台上创建和管理线程,特别是在Delphi XE5环境下。让我们深入...

    android线程启动方法源代码

    本文将深入解析Android线程启动的方法,并通过源代码示例帮助初学者理解和掌握这一关键技能。 Android系统基于Java,因此其线程机制遵循Java的基本规则,但同时也有一些特定于Android平台的特性。在Android中,主要...

    Android 线程+View的使用

    在Android开发中,线程和View的交互是十分常见的需求,因为Android的UI操作必须在主线程中进行,而耗时的操作(如网络请求、大数据处理等)则应该放在子线程中。本实例主要探讨如何在子线程中更新View,通过两种方式...

    Android线程问题.rar

    这个"Android线程问题.rar"压缩包可能包含了关于Android多线程的一些深入问题和实践案例,帮助开发者提升这方面的专业能力。 在Android系统中,主线程(也称为UI线程)负责处理用户交互事件,如触摸屏幕、显示通知...

    Android多线程操作

    因此,我们需要在Android中创建和管理多线程来解决这个问题。 一、线程类型 1. **标准Java线程**:可以使用`java.lang.Thread`类直接创建线程,通过重写`run()`方法实现线程任务。 2. **Handler/Looper/Message机制...

    android 单线程 多线程下载

    在Android开发中,数据的加载和处理经常涉及到线程的使用。本文主要探讨的是如何在Android平台上实现单线程和多线程下载,这是一项重要的技术,尤其在处理大文件或者需要后台持续运行的任务时。我们将从源码分析、...

    Android----线程实现图片移动

    线程在Android中扮演着处理后台任务的重要角色,它可以避免因为长时间运行操作而阻塞主线程,确保UI的流畅性。 首先,我们需要理解Android的线程模型。主线程,也被称为UI线程,负责处理所有的用户交互,如触摸事件...

    android多线程demo(很清晰很详细)

    在Android开发中,多线程是一项至关重要的技术,它能够帮助开发者实现应用程序的高效运行,尤其是在处理耗时操作如网络请求、数据加载等场景。本文将深入探讨Android多线程的相关知识点,基于“android多线程demo(很...

Global site tag (gtag.js) - Google Analytics