1. Activity的生命周期
完整:oncreate - onstart - onresume-onpause-onstop-ondestroy
前臺(tái):onstart-onpause-onstop
2. Service
http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html
http://blog.csdn.net/flowingflying/article/details/7616333#comments
Service的生命周期:onStart onDestroy onBind
#使用場(chǎng)景:
- 用戶(hù)離開(kāi)activity后济炎,仍需繼續(xù)工作遗菠,例如從網(wǎng)絡(luò)下載文件糠馆,播放音樂(lè)
- 無(wú)論activity出現(xiàn)(重現(xiàn))或離開(kāi),都需持續(xù)工作雀彼,例如網(wǎng)絡(luò)聊天應(yīng)用 -連接網(wǎng)絡(luò)服務(wù),正在使用一個(gè)遠(yuǎn)程API提供
的服務(wù)
-定時(shí)觸發(fā)的服務(wù),例如Linux中的cron
什么情況下使用 startService 或 bindService 或 同時(shí)使用startService 和 bindService?
- startservice():長(zhǎng)期在后臺(tái)執(zhí)行某個(gè)任務(wù). onstartcommand- oncreate
- bindservcie(): 需要通信與servie通信
######Service 與 Thread 的區(qū)別
---
很多時(shí)候屑彻,你可能會(huì)問(wèn),為什么要用 Service顶吮,而不用 Thread 呢社牲,因?yàn)橛?Thread 是很方便的,比起 Service 也方便多了悴了,下面我詳細(xì)的來(lái)解釋一下搏恤。
**1) Thread:**Thread 是程序執(zhí)行的最小單元,它是分配CPU的基本單位湃交∈炜眨可以用 Thread 來(lái)執(zhí)行一些異步的操作。
**2) Service:**Service 是android的一種機(jī)制搞莺,當(dāng)它運(yùn)行的時(shí)候如果是Local Service息罗,那么對(duì)應(yīng)的 Service 是運(yùn)行在主進(jìn)程的 main 線(xiàn)程上的。
Example:
onCreate才沧,onStart 這些函數(shù)在被系統(tǒng)調(diào)用的時(shí)候都是在主進(jìn)程的 main 線(xiàn)程上運(yùn)行的迈喉。
如果是Remote Service,那么對(duì)應(yīng)的 Service 則是運(yùn)行在獨(dú)立進(jìn)程的 main 線(xiàn)程上温圆。因此請(qǐng)不要把Service理解
成線(xiàn)程挨摸,它跟線(xiàn)程半毛錢(qián)的關(guān)系都沒(méi)有!
既然這樣岁歉,那么我們?yōu)槭裁匆?Service 呢得运?
其實(shí)這跟 android 的系統(tǒng)機(jī)制有關(guān),我們先拿 Thread 來(lái)說(shuō)刨裆。Thread 的運(yùn)行是獨(dú)立于 Activity 的澈圈,也就是說(shuō)當(dāng)一個(gè) Activity 被 finish 之后,如果你沒(méi)有主動(dòng)停止 Thread 或者 Thread 里的 run 方法沒(méi)有執(zhí)行完畢的話(huà)帆啃,Thread 也會(huì)一直執(zhí)行瞬女。因此這里會(huì)出現(xiàn)一個(gè)問(wèn)題:當(dāng) Activity 被 finish 之后,你不再持有該 Thread 的引用努潘。另一方面诽偷,你沒(méi)有辦法在不同的 Activity 中對(duì)同一 Thread 進(jìn)行控制坤学。
舉個(gè)例子:
如果你的 Thread 需要不停地隔一段時(shí)間就要連接服務(wù)器做某種同步的話(huà),該 Thread 需要在 Activity 沒(méi)有start的時(shí)候也在運(yùn)行报慕。這個(gè)時(shí)候當(dāng)你 start 一個(gè) Activity 就沒(méi)有辦法在該 Activity 里面控制之前創(chuàng)建的 Thread深浮。因此你便需要?jiǎng)?chuàng)建并啟動(dòng)一個(gè) Service ,在 Service 里面創(chuàng)建眠冈、運(yùn)行并控制該 Thread飞苇,這樣便解決了該問(wèn)題(因?yàn)槿魏?Activity 都可以控制同一 Service,而系統(tǒng)也只會(huì)創(chuàng)建一個(gè)對(duì)應(yīng) Service 的實(shí)例)蜗顽。
因此你可以把 Service 想象成一種消息服務(wù)布卡,而你可以在任何有 Context 的地方調(diào)用 Context.startService、Context.stopService雇盖、Context.bindService忿等,
Context.unbindService,來(lái)控制它崔挖,你也可以在 Service 里注冊(cè) BroadcastReceiver贸街,在其他地方通過(guò)發(fā)送 broadcast 來(lái)控制它,
當(dāng)然這些都是 Thread 做不到的狸相。