我的應用程序需要做一些後臺任務後啓動完成,並在睡眠模式。 所以我使用WakefulIntentService來避免睡眠模式下的流量問題,並且效果很好。 但是,當我試圖使用引導接收器在引導完成後繼續數據流時,它會產生一些奇怪的錯誤,並且有時也無法正常工作。啓動接收器有多個任務奇怪地工作
這裏是我的Boot Receiver類,我嘗試做多個任務。
public class OnBootReceiver extends BroadcastReceiver {
private static final int SERVICE_PERIOD = 300000; // 5 minutes currently
// private static final int HANDLER_PERIOD = 300000 * 12; // 1 hour
// currently
private static final String TAG = "OnBoot";
private Context mContext;
private int mInterval = 1000 * 60 * 60 * 2; // 2 hours by default, can be
// changed later
private Handler mHandler;
@Override
public void onReceive(Context context, Intent intent) {
mContext = context;
AlarmManager mgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, OnServiceReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + 60000, SERVICE_PERIOD, pi);
mHandler = new Handler();
startRepeatingTask();
}
Runnable mStatusChecker = new Runnable() {
@SuppressWarnings("unchecked")
@Override
public void run() {
SharedPreferences mSharedPreferences = mContext
.getSharedPreferences(KEY_USER_ID, 0);
String UserId = mSharedPreferences.getString(KEY_USER_ID, "0");
new SyncValidater(mContext, UserId).execute();
mHandler.postDelayed(mStatusChecker, mInterval);
}
};
void startRepeatingTask() {
mStatusChecker.run();
}
void stopRepeatingTask() {
mHandler.removeCallbacks(mStatusChecker);
}
}
在這堂課我寫了兩個任務。第一個是啓動另一個開始喚醒服務的廣播接收機(與github example相同)。第二個啓動一個處理程序,它啓動一個AsyncTask類,每兩小時執行一次服務器事務。但有時候,處理程序會隨機啓動,有時會停止。
所以在這裏我很困惑,這是我的應用程序需要兩個引導接收器? 是否有任何其他選項在當前接收器中執行這些多任務?
請大家幫忙。由於
感謝您的回答。但我有點困惑,我必須寫兩個報警管理器。在我的服務的doWakefulWork()或bootreceiver類中。 – user3678972
@ user3678972:「但我有點困惑,我必須在哪裏寫兩個報警管理器」 - 您已經有了一個報警管理器。我假設你應該在配置第一個之後立即配置第二個。 – CommonsWare