Android中如何利用多线程重复启动与停止服务-创新互联

今天小编给大家分享一下Android中如何利用多线程重复启动与停止服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

成都创新互联专注于企业网络营销推广、网站重做改版、安达网站定制设计、自适应品牌网站建设、H5页面制作商城开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为安达等各大城市提供网站开发制作服务。

Android 多线程实现重复启动与停止的服务

多线程环境下为了避免死锁,一般提倡开放调用,开放调用可以避免死锁,它的代价是失去原子性。但是在有些时候会显得逻辑错误,

例如:

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();  
  }  
 }  
}

   在单线程环境下这个代码没有任何问题。可是在多线程环境就会出现奇怪的现象。


  原则上讲, onStart 一定要走在onStop前面,可事实并非如此:


  执行步骤如下:

   线程1 start

   线程2 stop


   线程1

 if(!mIsStarted){

 mIsStarted = true; 
 changed = false; 
}

   线程2

synchronized(this){ 

 if(mStarted){  
  mStarted = false;  
 changed = true;  
 }  
}

以上就是“Android中如何利用多线程重复启动与停止服务”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注创新互联行业资讯频道。

分享文章:Android中如何利用多线程重复启动与停止服务-创新互联
URL标题:https://www.cdcxhl.com/article38/ccsopp.html

成都网站建设公司_创新互联,为您提供域名注册自适应网站品牌网站制作服务器托管做网站品牌网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

搜索引擎优化