Android多线程-多线程初步,进程线程详解

从这一部分咱们开始学习Android的多线程,在这以前要搞清楚两个概念,进程和线程。linux

Android启动一个应用程序时,若该应用程序无其余组件运行,那么系统会为这个应用程序启动一个新的linux进程,并在这个进程中默认启动一个UI线程(主线程)。默认状况下,同一应用程序的全部组件都在同一进程的主线程中运行。若是应用程序组件启动,而且已经存在该应用程序的进程(由于应用程序中的其它组件已经启动),则组件将在该进程中启动,并使用相同的主线程。可是,您能够经过设置让应用程序中的不一样组件分别在不一样的进程中运行,而且能够为任何进程建立其它线程。接下来详细讲述进程和线程。web

进程(Process)

每一个App在启动前必须先建立一个进程,该进程是由Zygote fork出来的,进程具备独立的资源空间,用于承载App上运行的各类Activity/Service等组件。大多数状况一个App就运行在一个进程中,除非在AndroidManifest.xml中配置Android:process属性,或经过native代码fork进程。数据库

线程

默认每一个Android应用程序只会有一个线程(UI线程,即主线程),主线程负责该应用程序UI界面的显示、更新、控件交互等等,所以一些耗时操做(网络访问、下载操做、查询数据库等等)不能够放在主线程中进行,以避免阻塞主线程。网络

ps:Android规定,只有在UI线程中才能进行UI的更新操做。多线程

既然Android只能在UI线程中操做UI控件,并且不能在主线程中进行耗时操做,那么问题就来了,若是咱们访问网络获取数据后须要在UI上进行展现,那么咱们要怎么作呢?建立一个子线程访问网络,在数据获取完成中,怎样通知主线程进行UI更新呢,这就涉及到咱们要讲的多线程通讯了。异步

多线程通讯

要进行多线程通讯,Android中有这样几种方式:svg

  1. activity.runOnUiThread(Runnable runnable); Activity中的方法,在子线程中调用,能够在方法内进行UI的更新操做。
  2. view.post(Runnable runnable); view.postDelayed(Runnable runnable,long delayMillis); View中的方法,进行UI操做,或者延迟后进行UI操做
  3. BroadCast结合BroadCastReceiver 使用Android广播机制,在子线程中发出更新广播,在主线程中接收该广播并进行相应操做,使用的并很少,了解便可
  4. AsyncTask 使用AsyncTask开启异步任务在子线程中进行UI的更新**
  5. Handler 使用Handler进行线程间通讯从而达到子线程更新UI的目的

接下来一段时间,咱们就来详细讲解下使用Handler进行线程间通讯的方法,以及Handler的原理,以及HanderTread和AsyncTask的使用等等,敬请期待~post