今天小編給大家分享一下Android中如何利用多線程重復(fù)啟動(dòng)與停止服務(wù)的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
都勻網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
Android 多線程實(shí)現(xiàn)重復(fù)啟動(dòng)與停止的服務(wù)
多線程環(huán)境下為了避免死鎖,一般提倡開(kāi)放調(diào)用,開(kāi)放調(diào)用可以避免死鎖,它的代價(jià)是失去原子性。但是在有些時(shí)候會(huì)顯得邏輯錯(cuò)誤,
例如:
class A{ private boolean mIsStarted; void start(){ boolean changed = false; synchronized(this){ if(!mIsStarted){ mIsStarted = true; changed = false; } if(changed){ callBack.onStart(); } } } boolean isStarted(){ sychronized(this){ return mIstarted; } } void stop(){ boolean changed = false; synchronized(this){ if(mStarted){ mStarted = false; changed = true; } } if(changed){ callBack.onStop(); } } }
在單線程環(huán)境下這個(gè)代碼沒(méi)有任何問(wèn)題??墒窃诙嗑€程環(huán)境就會(huì)出現(xiàn)奇怪的現(xiàn)象。
原則上講, onStart 一定要走在onStop前面,可事實(shí)并非如此:
執(zhí)行步驟如下:
線程1 start
線程2 stop
線程1
if(!mIsStarted){ mIsStarted = true; changed = false; }
線程2
synchronized(this){ if(mStarted){ mStarted = false; changed = true; } }
以上就是“Android中如何利用多線程重復(fù)啟動(dòng)與停止服務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。