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

 更新时间:2017年08月16日 11:00:19   投稿:lqh  
这篇文章主要介绍了Android 多线程实现重复启动与停止的服务的相关资料,多线程环境下为了避免死锁,一般提倡开放调用,开放调用可以避免死锁,它的代价是失去原子性,这里说明重复启动与停止的服务,需要的朋友可以参考下

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

   线程2 onStop 

   线程1 onStart 

现在onStop 走在了onStart前面。那么问题来了,如何才能保证onStart 一定在onStop前面呢? 

那么问题又来了,stop 方法为什么不允许在start之前调用呢?如果一个类不可restart,那么stop是可以在start之前的,否则是不可以在start之前的。

以上就是Android 多线程实现重复启动与停止的服务的讲解,如有疑问请留言或者到本站社区交流讨论,感谢 阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android 读取txt,按行读取的实例讲解

    Android 读取txt,按行读取的实例讲解

    今天小编就为大家分享一篇Android 读取txt,按行读取的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Android编程实现下载时主界面与详细界面一致更新的方法

    Android编程实现下载时主界面与详细界面一致更新的方法

    这篇文章主要介绍了Android编程实现下载时主界面与详细界面一致更新的方法,涉及Android事件监听及界面动态更新相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • android 使用XStream解析xml的实例

    android 使用XStream解析xml的实例

    下面小编就为大家分享一篇android 使用XStream解析xml的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android实现底部半透明弹出框PopUpWindow效果

    Android实现底部半透明弹出框PopUpWindow效果

    这篇文章主要为大家详细介绍了Android实现底部半透明弹出框PopUpWindow效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android Bitmap的加载与缓存

    Android Bitmap的加载与缓存

    这篇文章主要介绍了Android Bitmap的加载与缓存的相关资料,需要的朋友可以参考下
    2018-03-03
  • Android自定义View实现开关按钮

    Android自定义View实现开关按钮

    android 自定义view知识非常广泛,难以让人掌握。但是也是andoroid进阶学习的必经之路。下面通过本文给大家介绍Android自定义View实现开关按钮的知识,非常不错,感兴趣的朋友一起看看吧
    2016-11-11
  • SimpleCommand实现上传文件或视频功能(四)

    SimpleCommand实现上传文件或视频功能(四)

    这篇文章主要介绍了SimpleCommand实现上传文件或视频功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 详解MVP模式在Android开发中的应用

    详解MVP模式在Android开发中的应用

    MVP是MVC衍生而来的,很早以前就由某软公司提出,近年来在Android应用开发中越来越多的被提及,越来越重要了。这篇文章主要介绍了详解MVP模式在Android开发中的应用,有兴趣的可以了解一下。
    2016-11-11
  • android中实现在ImageView上随意画线涂鸦的方法

    android中实现在ImageView上随意画线涂鸦的方法

    今天小编就为大家分享一篇android中实现在ImageView上随意画线涂鸦的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Android自定义Dialog框样式

    Android自定义Dialog框样式

    这篇文章主要为大家详细介绍了Android自定义Dialog框样式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论