`

Android中关于线程使用的几点注意事项

阅读更多

版权所有:飞雪无情,转载请注明出处:http://flysnow.iteye.com/blog/1053996

        我们都知道Android是单线程模型,这意味着Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,所以你单纯的new一个Thrad并且start()不行的,因为这违背了Android的单线程模型。

        很幸运的是Android为我们提供了在其他线程中访问UI线程的方法,相信大家都见过,这几个就是Activity的runOnUiThread方法,View的post和postDelayed方法,以及最常用的Hanlder和AsyncTask,这里我推荐使用Hanlder和AsyncTask,尤其是AsyncTask,因为使用他们你会发现你的代码很容易被理解,因为他们都有一些具有特定职责的方法,尤其是AsyncTask,有预处理的方法onPreExecute,有后台执行任务的方法doInBackground,有更新进度的方法publishProgress,有返回结果的方法onPostExecute等等,这就不像post这些方法,把所有的操作都一大坨的写在一个Runnable里。

          有了Android为我们提供了这些方法我们就可以很好的解决一些长时间处理的任务了,但是在使用的时候我们还必须注意以下几点:


  1. 这些方法或者类必须在在UI线程中创建和调用
  2. 其实这些方法和类最终的实现都是Android的Message、MessageQueue和Looper的机制,所以不要期待你会马上看到结果(效果),因为这是一个Loop一直循环出MessageQueue中的Message执行的过程,如果你没有看到效果,那么等等吧,因为还没有轮到你。
  3. 有线程(多个)的地方就会有并发,会有资源共享冲突,所以在使用的时候谨慎点吧,说不准你的一个线程中使用的变量已经被另一个线程改的面目全非了。。
后语:忙的很久没有写博客了,搭黑写了平时总结的线程的注意事项,demo就不写了,相信大家都会,此外多了解点Android的消息机制对于这个理解比较好的多。。













 

77
10
分享到:
评论
3 楼 飞雪无情 2013-01-25  
水木清华77 写道
1 这些方法或者类必须在在UI线程中创建和调用
这个不一定吧,可以再创建的线程里面继续新开线程,在异步网络操作中,需要缓存到本地数据库,那么缓存数据库这一步就可以新开线程。并不是在主线程里面创建的


如果你自己new Thread,然后start是不需要的,这样也就决定了你在这个Thread里不能对UI进行更新,如果要更新还是要发Message。其实如AsyncTask要在UI里创建主要是使用UI线程的Looper。
2 楼 水木清华77 2013-01-24  
1 这些方法或者类必须在在UI线程中创建和调用
这个不一定吧,可以再创建的线程里面继续新开线程,在异步网络操作中,需要缓存到本地数据库,那么缓存数据库这一步就可以新开线程。并不是在主线程里面创建的
1 楼 habzyhs 2011-06-05  
一大坨 说得很给力·~~

相关推荐

    Android定时器和线程实现

    在提供的`ThreadDemo`示例中,可能包含了如何在Android中使用线程和定时器的具体代码实现,这将有助于加深对这两个概念的理解。通过分析和学习这个示例,你可以更好地掌握在实际项目中如何运用这些技术。记得实践是...

    ndk中使用原生线程

    在Android开发中,NDK(Native Development Kit)提供了一个平台...通过上述介绍,我们可以了解到在NDK中使用原生线程的基本步骤和注意事项。在实际开发中,结合Java层的控制,可以充分利用NDK的优势,提高应用的性能。

    Android快速框架+多线程下载

    **其他注意事项** 在实际开发中,还需要考虑以下因素以确保良好的用户体验: 1. **断点续传**:记录每个线程的下载进度,当下载中断时可以从断点处继续。 2. **错误处理**:处理网络异常、文件IO异常等,确保程序...

    Android 中ViewPager中使用WebView的注意事项

    在Android开发中,ViewPager是一个...以上就是关于在Android中使用ViewPager和WebView的一些核心注意事项。遵循这些最佳实践,可以提高应用的性能和用户体验。在实际开发中,还需要根据具体需求进行适当的调整和优化。

    Android入门:多线程断点下载详细介绍

    四、注意事项四、注意事项在实现多线程断点下载时,需要注意以下几点: 1. 同步问题:多个线程同时写入数据库可能会引发冲突,需要使用合适的同步机制保证数据一致性。 2. 错误处理:处理网络异常、文件写入异常等...

    Android App在线程中创建handler的方法讲解

    关于Handler与线程的关系,以下几点值得注意: - HandlerThread是一个封装了Looper的Thread,它内部有一个消息循环。 - Handler会与创建时所在线程绑定,主线程的Handler可以更新UI,而子线程的Handler则不能直接...

    Android线程池管理的代码例子

    本示例将详细介绍如何在Android中使用两种主要的线程池:ThreadPoolExecutor和ScheduledExecutorService。 ThreadPoolExecutor是Java并发库中提供的一个基础线程池实现,它允许开发者自定义核心线程数、最大线程数...

    Android studio下的quartz工程

    在Android中使用Quartz需要注意以下几点: - **主线程限制**:由于Android对主线程的操作有严格限制,所有耗时操作应放在后台线程执行,避免阻塞UI。 - **生命周期管理**:确保在应用启动时启动调度器,并在退出时...

    超爽Android中文教程

    14. **Android应用发布流程**:从签名APK到上传Google Play Store,整个过程的注意事项和步骤。 15. **Android新特性**:随着Android版本的更新,新特性层出不穷,如Jetpack组件库、LiveData、Room数据库、Kotlin...

    Android C++高级编程:使用NDK 中文完整版

    10. **案例实践**:通过实际项目案例,演示如何在Android应用中使用C++实现复杂功能,如音视频处理、游戏开发和高性能计算等。 通过学习这本书,读者可以掌握在Android平台上高效地使用C++进行开发,提升应用性能,...

    android Qt 编译

    在实际开发中,你可能还需要关注以下几点: - **设备适配**:Qt支持多种Android架构,确保你的APK包含所有必要的ABI,以便在不同设备上运行。 - **权限管理**:在AndroidManifest.xml中添加所需的权限,例如网络...

    android websocket demo

    - 在Android中,由于网络操作应在工作线程中执行,因此通常需要使用AsyncTask或其他异步处理机制。 - 针对Android系统的碎片化问题,需要确保所选WebSocket库兼容各种版本的Android系统。 - 考虑到网络环境的不稳定...

    Android串口通信Demo

    本文将详细解析"Android串口通信Demo"的实现原理、关键步骤及注意事项,帮助开发者理解如何在Android应用中实现串口通信。 串口通信,也称为串行通信,是一种数据传输方式,通过串行数据线一次传输一个比特位。在...

    android socket

    在Android中使用UDP Socket,我们需要了解以下几个关键知识点: 1. **创建DatagramSocket**:Android提供了`DatagramSocket`类来创建UDP Socket。首先,我们需要实例化一个`DatagramSocket`对象,通常在构造函数中...

    android-ndk-r23-windows.zip

    3. **集成到Android Studio**:在Android Studio中配置NDK路径,以便在项目中使用。 4. **使用NDK编译原生代码**:通过CMake或ndk-build脚本编译.so库文件,然后在Android应用中引用。 四、原生代码开发与调试 ...

    阿里巴巴-Android开发手册

    9. **其他**:包括了一些其他重要的开发技巧和注意事项。 #### 三、核心知识点详述 ##### 1. Java语言规范 这部分内容遵循《阿里巴巴Java开发手册》,重点在于强调高质量的Java编程实践,旨在提高代码的可读性和可...

    Android大作业

    从给定的标题和描述中,我们可以提炼出几个关键的知识点和开发过程中的注意事项: 1. **用户界面设计**:一个优秀的Android应用必须具备友好的用户界面。这涉及到对Android Material Design设计规范的理解和应用,...

    Android远程调用sql server实现增删查改

    #### 注意事项 - 在Android端进行数据库操作时,应确保所有数据库交互都在子线程中进行,避免阻塞主线程导致UI卡顿。 - 如果使用的是动态IP地址(如无线网络下的IP地址),每次重新连接网络后都需要更新连接字符串...

    《Android游戏开发案例与关键技术》读书笔记模板x.pptx

    * 多线程的使用:在游戏中使用多线程可以提高游戏的性能和响应速度。 * 多线程的注意事项:需要注意同步问题和数据安全问题。 六、游戏移植和开发 * 游戏移植:将游戏移植到Android平台上,需要使用NDK和OpenGL ES...

Global site tag (gtag.js) - Google Analytics