在我的應用程序,我想提供一個動作,這將在後臺定期執行。所以我使用AlarmManager,它啓動一個IntentService。延時服務動作,直到網絡連接可用
棘手的部分是,這樣的背景下行動需要互聯網連接。所以我試着用一個WakeLock,當設備被鎖定時似乎沒有強制執行連接。
然後我想到在服務啓動時註冊BroadcastReceiver來偵聽「android.net.conn.CONNECTIVITY_CHANGE」,並在收到所需的廣播後馬上取消註冊。
我的代碼看起來是這樣的:
public class BackgroundService extends IntentService {
private static final IntentFilter filter =
new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
private static NetworkStateChangedReceiver receiver =
new NetworkStateChangedReceiver();
protected void onHandleIntent(Intent intent) {
registerReceiver(receiver, filter);
}
}
我的問題是現在:請問這個接收器被破壞,只要該服務停止(因爲它沒有任何關係,只要沒有連接可用)? 因此,如何才能實現一項服務,延遲它的工作,直到網絡連接可用?
謝謝。
所以我能做的最好的,是遍地啓動任務,直到建立連接? –
@cypressious:這是一種方法。我概述了兩個,其中一個不符合該描述。 – CommonsWare
我明白了。你的第二個建議是註冊一個永久的BroadcastReceiver。就我而言,任務應該每天執行1-2次。這是不是壞風格,每隔5分鐘處理一次廣播,忽略其中95%? –