千家信息网

Android中如何利用多线程重复启动与停止服务

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,今天小编给大家分享一下Android中如何利用多线程重复启动与停止服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所
千家信息网最后更新 2025年02月03日Android中如何利用多线程重复启动与停止服务

今天小编给大家分享一下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;   }  }

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

0