Android 多線程實(shí)現(xiàn)重復(fù)啟動(dòng)與停止的服務(wù)
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;
}
}
線程2 onStop
線程1 onStart
現(xiàn)在onStop 走在了onStart前面。那么問(wèn)題來(lái)了,如何才能保證onStart 一定在onStop前面呢?
那么問(wèn)題又來(lái)了,stop 方法為什么不允許在start之前調(diào)用呢?如果一個(gè)類(lèi)不可restart,那么stop是可以在start之前的,否則是不可以在start之前的。
以上就是Android 多線程實(shí)現(xiàn)重復(fù)啟動(dòng)與停止的服務(wù)的講解,如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝 閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
- Android線程管理之ActivityThread
- Android應(yīng)用實(shí)現(xiàn)安裝后自啟動(dòng)的方法
- android開(kāi)機(jī)自啟動(dòng)APP及使用adb命令測(cè)試方法
- Android 代碼設(shè)置開(kāi)機(jī)自啟動(dòng)App的方法
- android引導(dǎo)用戶開(kāi)啟自啟動(dòng)權(quán)限的方法
- Android的權(quán)限設(shè)置及自啟動(dòng)設(shè)置方法
- Android實(shí)戰(zhàn)APP啟動(dòng)速度優(yōu)化
- Android程序靜默安裝安裝后重新啟動(dòng)APP的方法
- 詳解Android中的ActivityThread和APP啟動(dòng)過(guò)程
相關(guān)文章
淺談android組件化之ARouter簡(jiǎn)單使用
本篇文章主要介紹了淺談android組件化之ARouter簡(jiǎn)單使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
Android UI自定義ListView實(shí)現(xiàn)下拉刷新和加載更多效果
這篇文章主要介紹了Android UI自定義ListView實(shí)現(xiàn)下拉刷新和加載更多效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android實(shí)現(xiàn)3D標(biāo)簽云效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)3D標(biāo)簽云效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
輕松實(shí)現(xiàn)Android仿淘寶地區(qū)選擇功能
這篇文章主要介紹了輕松實(shí)現(xiàn)Android仿淘寶地區(qū)選擇功能的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android?Studio實(shí)現(xiàn)簡(jiǎn)易計(jì)算器源碼
這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)簡(jiǎn)易計(jì)算器源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Android超實(shí)用的Toast提示框優(yōu)化分享
Toast是Android中用來(lái)顯示顯示信息的一種機(jī)制,和Dialog不一樣的是,Toast是沒(méi)有焦點(diǎn)的,而且Toast顯示的時(shí)間有限,過(guò)一定的時(shí)間就會(huì)自動(dòng)消失。那么這篇文章跟大家分享下Android中Toast的優(yōu)化,對(duì)大家日常開(kāi)發(fā)還是很實(shí)用,下面來(lái)一起看看吧。2016-09-09

