早在開(kāi)始學(xué)習(xí)Android開(kāi)始渐苏,四大組件就以學(xué)習(xí)了解了不少掀潮,可是總是對(duì)這些基礎(chǔ)知識(shí)了解不夠牢固,用的時(shí)候總是不知道如何下手琼富,于是還是踏踏實(shí)實(shí)腳踏實(shí)地重新學(xué)習(xí)這些基礎(chǔ)知識(shí)仪吧。
概述
Service是Android四大組件之一,主要是用來(lái)當(dāng)作后臺(tái)處理的工具鞠眉,它與Activity不是同一個(gè)東西薯鼠,所以當(dāng)Activity結(jié)束時(shí)Service不受到任何的影響,該繼續(xù)工作就繼續(xù)工作械蹋。一個(gè)組件若是同Service進(jìn)行綁定出皇,則它們之間可以進(jìn)行數(shù)據(jù)的交互,同時(shí)哪怕是不同的進(jìn)程之間都可以進(jìn)行進(jìn)程交互(IPC)哗戈。
使用場(chǎng)景:網(wǎng)絡(luò)請(qǐng)求
郊艘、音樂(lè)操控
、文件的I/O流操作
等等唯咬。
使用方法
Service的調(diào)用一共兩種啟用方式:startService纱注、bindService。
startService方式
該方式獨(dú)立在后臺(tái)運(yùn)行副渴,需要自己調(diào)用銷(xiāo)毀命令奈附。
使用場(chǎng)景:上傳
、下載
煮剧。
bindService方式
這個(gè)方式則是提供了一種client-service
的接口,可以與Service進(jìn)行發(fā)送以及返回結(jié)果操作将鸵,設(shè)置了IPC是不同的進(jìn)程
之間也可以進(jìn)行通信勉盅,可以多個(gè)組件之間綁定Service,通過(guò)該方式創(chuàng)建的Service的銷(xiāo)毀是在與它進(jìn)行綁定的所有組件都解除綁定時(shí)自動(dòng)進(jìn)行顶掉。
注意:Service的確是在后臺(tái)運(yùn)行草娜,但是這個(gè)后臺(tái)依舊是在
主線程
中,所以也會(huì)發(fā)生堵塞主線程的情況痒筒,所以說(shuō)在我們使用Service的同時(shí)宰闰,也需要將一些耗時(shí)操作(網(wǎng)絡(luò)通信等等)另開(kāi)線程茬贵。
Service中的方法解析
onstartCommand:該方法的實(shí)現(xiàn)一般是在使用startService出現(xiàn),重寫(xiě)該方法需要自行調(diào)用stopSelf
或者stopService
方法移袍。
onBind:這個(gè)函數(shù)一般在我們繼承Service時(shí)就會(huì)自動(dòng)生成解藻,如果你不使用bind方式,那么就直接return null
葡盗,如果你需要使用該方法螟左,就需要返回一個(gè)IBinder
類(lèi),通過(guò)這個(gè)用來(lái)與Service進(jìn)行通信觅够。
onCreate:這個(gè)方法在我們使用Activicy中見(jiàn)多不怪了胶背,但是這里的這個(gè)方法只是第一次
啟動(dòng)時(shí)調(diào)用,主要是用來(lái)初始化一些變量喘先。
onDestory:在銷(xiāo)毀該Service時(shí)調(diào)用钳吟,比如在我們創(chuàng)建了一些thread、listeners窘拯、receivers等等砸抛,然后將其清理的方法寫(xiě)入其中。
提示:當(dāng)我們創(chuàng)建Service時(shí)與需要在Manifest中注冊(cè)树枫,同時(shí)可以在android:exported屬性中設(shè)置false直焙,以防止其他程序啟動(dòng)。
兩種Service啟動(dòng)方式生命周期
(一)startService生命周期
(二)bindService生命周期