我有一种服务,它定期从网站下载一些更新。 默认期间很长,大约10分钟,我用AlarmManager启动这项服务。等待服务中的网络变化,以便下载更新
网络可开启或关闭,的情况下,它是关闭的服务应该尽快下载新闻网络收益上,因为间隔较长,在最坏的情况下,你可能要等20分钟,直到下一次更新。
我做了一个网络状态广播接收器,并与少的代码我做了一个NetworkListener接口:
public interface NetworkStateListener {
public void onNetworkOn();
public void onNetworkDown();
}
所以我的服务有以下2种方法,当网络中断或关闭可以知道了。
我的想法如下:在onStart()方法中,我产生了一个新的线程:如果网络关闭线程等待,否则下载。当onNetworkOn()被调用我所说的通知():
private boolean threadWaiting; //a flag so that I don't spawn multiple threads
public int onStartCommand(Intent intent, int flags, int startId) {
if(!threadWaiting){//if already a thread waiting do nothing and exit
Thread t = new Thread(new Runnable(){
@Override
public void run() {
synchronized(binder){
while(!isNetworkOn())
try {
threadWaiting = true;
binder.wait();
}catch(InterruptedException ex){
ex.printStackTrace();
}
}
// blocks until network connection is available
threadWaiting = false;
//... operations ...
这是onNetworkOn()方法:
public void onNetworkOn() {
synchronized(binder){
binder.notify();
}
这是正确的前进方式是什么?