android视频教程

android视频教程

5 (13人评价)
  • 课时:(26)

  • 学员:(409)

  • 浏览:(15171)

  • 加入课程

android视频教程14的笔记

相关课时: 笔记详情:

了解Linux多线程概念

了解Android的一步任务机制

了解Android多线程的实现

 

Linux有真正意义的多线程吗?

 

linux如何支持多线程的?(附加两个系统库实现线程:LinuxThreads or NPTL(Native Posix Thread Library,radhat推出)。Linux2.6之前采用LinuxThreads。NPTL资源消耗更低,也是1:1的机构,但在信号处理,线程同步,存储管理等多方面进行了优化)

我们吧线程系统分两类

1、操作系统内核实现了现场模型(核心级线程)-Windows-线程与进程的多对多模型,线程的调度者在核内。windows线程调度效率比较高

Sample

Edraw画图工具,windows线程模型

OS kernel:

Process Model

Process Manage and Dispatch

Thread Model

Thread Manage and Dispatch

Libraries:

Porcess Piper

Thread Piper

UserApplication:

UserProcess

UserThread

ThreadPool

用户进程和用户线程是多对多的关系:Many to Many

 

2、操作系统核外实现的线程(用户级线程)-Linux,部分Unix-线程与进程的一对一、一对多模型,线程的调度者在核外。效率不高。

Sample:

Linux设计遵循:简单即是美。最开始对线程没有充分的考虑,没考虑多核cpu。内核中轻量级进程:为了减少进程切换的开销,把资源从主体分离,进程共享资源,形成轻量级进程。

OS kernel:

Process Model

Process Manage and Dispatch

Lite Process Model

Lite Process Manage and Dispatch

Libraries:

Porcess Piper

Thread Model

UserApplication:

UserProcess

UserThread

ThreadPool

用户进程和用户线程是一对一的关系:One to One

 

代码分析:

Pthread.c

 

Android如何进行多线程或者异步的处理?(和java一样)

new Thread:要调用start()方法

Runnable:是线程体,通过线程thread执行。

Handler(异步任务):post(Runnable)方法不启动新的线程,没有真正实现异步。Handler是通过HandlerThread 使得子线程与主线程分属不同线程的。实际上,HandlerThread 是一个特殊的线程,它是一个封装好Looper的线程。

AsycTask(异步任务)

(Handler和AsycTask后面有课程剖析源码)

 

百度了下Thread和Runnable区别,参考

http://www.jb51.net/article/37465.htm

http://www.iteye.com/problems/66985

http://blog.csdn.net/boyupeng/article/details/6208072

Runnable可能并没有开启一个新的线程,mHandler.post(r)其实是只调用线程的run()方法,然不是调用start()方法来启动一个新线程;而Thread必需执行start方法才启动一个新的线程,mars的java提到执行run()方法没有启动新的线程。

 

什么时候需要多线程和异步?

说白了就是耗时操作和定时操作(android耗时一般指超过5s;定时一般指一个schedule task的需要)

IO操作(网络操作,文件操作,数据库操作)

复杂的运算工作

消息接收方法中的耗时操作

计划任务

 

多线程同步Synchronized

 

多线程和界面交互

Android UI 主线程简单原则:不要Block UI Thread;不要在UI线程外直径操作UI.

1 Activity.runOnThread(Runnable)

2 View.post(Runnable);

   View.postDelay(Runnable,long)

3 Handler

4 AsyncTask

 

baidu多线程和异步:

多线程可以制造异步的效果.有阻塞(不干活,白白等待)就需要异步  无阻塞无需异步,无需多线程.

异步简单说就是,数据处理不会阻塞,而是立即返回继续处理下一任务

异步是针对当前线程处理的时序上的概念。异步就是用多线程来实现的

异步和多线程并不是一个同等关系,异步是最终目的,多线程只是我们实现异步的一种手段。异步是当一个调用请求发送给被调用者,而调用者不用等待其结果的返回而可以做其它的事情。实现异步可以采用多线程技术或则交给另外的进程来处理。

0 0

你感兴趣的课程

8万+浏览/ 916学员/ 4.5评分
免费
6万+浏览/ 177学员/ 5评分
免费
6万+浏览/ 972学员/ 4.8评分
免费