【发布时间】:2014-04-01 20:31:31
【问题描述】:
我对设置闹钟有点困惑。如果有人可以提供反馈或一些提示,将不胜感激。总而言之,这是我的情况:
在我的应用程序中,我设置了一个闹钟:
////////////////////////
// Set an alarm
// Actually I set a unique id here. The hardcoded value is for simplicity only.
int id = 123454321;
Intent intent = new Intent(context, MyAlarm.class);
PendingIntent sender = PendingIntent.getBroadcast(context, id, intent, 0);
long firstTime = SystemClock.elapsedRealtime();
firstTime += 10*1000;
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, sender);
////////////////////////
////////////////////////
// MyAlarm implementation
public class MyAlarm extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// Do some periodic work here
}
}
////////////////////////
当我设置闹钟时,一切都很好。当我使用命令时,我可以看到我的警报:
adb shell dumpsys alarm
即使我的应用程序进入后台,我也能看到警报。
接下来我通过
手动杀死我的应用程序设置-应用程序-管理应用程序--强制停止
当我重新发出命令“adb shell dumpsys alarm”时,我发现我的警报消失了。这让我觉得当我的应用程序进入后台并且框架将其杀死以释放资源时,我的警报也会被杀死。但是,我想要一个警报,它会独立于应用程序是否正在运行。有没有人有提示如何做到这一点?
【问题讨论】:
-
考虑使用服务?即使这样,服务也有可能被杀死,你可以给服务更高的优先级,这样你的服务被杀死的可能性就最小了。
-
是的,我也尝试过服务,但服务也被杀死了。我从另一个平台上的 Mark Murphy 那里得到了关于这个主题的评论,他说手动停止这样的应用程序不会模拟操作系统行为。