十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章将为大家详细讲解有关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 中怎么利用多线程重复启动与停止服务就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。