当前位置: 代码迷 >> Android >> 关于一种设计思路的有关问题?
  详细解决方案

关于一种设计思路的有关问题?

热度:50   发布时间:2016-05-01 13:33:55.0
关于一种设计思路的问题????
启动一个服务后,会实例化OPT类,并调用方法A,
在a方法中会执行一个等待:
synchronized (OPT.this) {
try {
wait(5分钟);
} catch (InterruptedException e) {
....
}
}

在等待时,我强制关闭服务后,再启动,会在调用OPT的a方法时停住,因为OPT没有notify

现在我把OPT写成了单例模式,

启动服务时通过OPT.getInstance()获得实例
关闭服务时在onDestroy里做了notify:
if (opt == null) {
OPT.getInstance().notifyAll();
}else{
opt.notifyAll();
}

但是这样没有效果,OPT类没有被notify掉,在下次启动服务时还是会停在调用a方式那儿,直到时间结束;

请问我应该怎么做才能在服务关闭时notify掉OPT类?????

------解决方案--------------------
你这里的强制关闭服务是什么意思?杀死process?
------解决方案--------------------
进程都木有了,哪还来的对象
------解决方案--------------------
这个,你是在主线程中wait(5分钟);第一次就会ANR吧,你可以等一回看看是不是这样
------解决方案--------------------
比较一下启动和消毁时调用OPT.getInstance()得到的是不是同一个对象

------解决方案--------------------
首先要意识到一个问题:ondestory并不会立即关闭线程和清空所有资源(如果需要强制关闭可以到 设置--管理应用程序--app--强行停止)
请注意你在主线程notifyall, 子线程并没有关闭,而是被唤醒继续参与竞争,也就造成了服务关闭时线程还在运行的原因
------解决方案--------------------
线程是从属于进程的吧,对于android来说,就是每个程序运行在一个jvm进程里
当进程被杀死时,线程肯定都玩完了
------解决方案--------------------
很不解,进程没了线程还在。
  相关解决方案