我的应用程序需要在启动完成后以及睡眠模式下执行一些后台任务。 所以我使用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类,每两个小时执行一次服务器事务。但有时处理程序会在随机时间内启动,有时会停止。
所以在这里我很困惑,我的应用程序需要两个启动接收器? 还有其他选择在当前接收器中执行这些多个任务吗?
请帮忙。感谢
答案 0 :(得分:2)
第二个启动一个处理程序,它启动一个AsyncTask类,每两个小时执行一次服务器事务
不,您的第二个任务将运行一次,可能永远不会再运行,因为您的流程在此期间终止。
所以我在这里感到困惑,这是我的应用程序需要两个启动接收器?
没有
还有其他选项可以在当前接收器中执行这些多项任务吗?
使用两个AlarmManager
个事件,每个事件都有自己的句号。一个是您当前的AlarmManager
事件。另一个是你创建的,用于支持你每两个小时完成的工作。