我试图四处搜索,但似乎我是唯一遇到这种错误的人,所以也许有人能够指出我做错了什么。
我通过这个函数创建了一个AlarmManager
:
public void startTimer() {
Intent myIntent = new Intent(MainActivity.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0,
myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(),
AlarmManager.INTERVAL_FIFTEEN_MINUTES / 50, pendingIntent);
Toast.makeText(MainActivity.this, "Start Alarm", Toast.LENGTH_LONG)
.show();
}
它是按预期创建的:调用OnCreate()
然后调用OnStart()
。 然后我通过调用函数来停止计时器:
private void stopTimer() {
Intent myIntent = new Intent(MainActivity.this, MyAlarmService.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0,
myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
}
而且在这次通话之后,它确实停止了。
之后,当 AlarmManager 的OnCreate()
和OnStart()
方法在应用程序关闭很久之后被调用并且在这些调用中没有容易看到的系统时,就会出现问题。虽然这似乎发生在我的手机缺乏可用内存时。
有什么想法吗?提前感谢!
您的服务需要在完成后调用stopSelf()
,或者您需要切换到使用IntentService
,这将在完成后自动调用stopSelf()
。现在,您正在泄漏服务,Android正在一段时间后销毁并重新创建它。