【发布时间】:2014-06-16 14:47:15
【问题描述】:
我的应用程序需要在启动完成后执行一些后台任务,并且还需要处于睡眠模式。 所以我使用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 类以每两小时执行一次服务器事务。但有时处理程序会随机启动,有时会停止。
所以我很困惑,我的应用程序需要两个引导接收器吗? 有没有其他选项可以在当前接收器中执行这些多项任务?
请帮忙。谢谢
【问题讨论】:
标签: android broadcastreceiver commonsware-cwac android-handler