我有一種服務,它定期從網站下載一些更新。 默認期間很長,大約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();
}
這是正確的前進方式是什麼?