安卓强制每分钟关闭定时服务

3

我想安排一个服务,每分钟运行一次,并检查我的应用程序是否仍在运行。(如果应用程序关闭,我想重新打开它)。 此外,如果我的应用程序被任务管理器强制关闭,我仍然希望该服务每分钟运行一次。 谢谢!


不要这么做。别这样强制启动你的应用程序,那是让用户恼火并产生差评的最佳途径。(除非你有一个非常好的理由,我很好奇想听听) - njzk2
我正在编写一个“家长控制”应用程序,该应用程序安装在孩子的手机上。我想防止他强制关闭应用程序,除非是由家长关闭。 - Erel Hansav
每分钟给一个一分钟的时间框架来执行操作,而不让应用程序知道... - njzk2
2个回答

2
此外,如果我的应用程序被任务管理器强制停止,我仍希望此服务每分钟运行一次。但在Android 3.1及以上版本中,这是不可能的。如果用户进入设置并强制停止您的应用程序,则您的应用程序将不再运行,直到用户手动启动您的组件。如果您的进程由于其他原因(例如来自Play商店的普通任务杀手应用程序,从最近任务列表中滑动您的任务),则按照Lucifer的建议,使用AlarmManager安排的警报应该保持完整。我正在编写一个“家长控制”应用程序,该应用程序安装在孩子的手机上。然而,任何足够聪明以使用手机的孩子都足够聪明以安全模式重新启动其设备并摆脱您的应用程序。

你的意思是,如果我进入内置任务管理器并按“Kill”(就像在冰淇淋三明治中一样),它仍然会每分钟运行一次,但如果他进入设置并强制停止应用程序,则不会每分钟运行一次,我理解你的意思了吗? 谢谢! - Erel Hansav
@ErelHansav:“如果他进入设置并强制停止应用程序,它就不会每分钟运行”——正确。除了最近任务列表之外,在Android中没有内置的任务管理器,该列表(据我上次检查)不在任何地方显示“kill”一词。 - CommonsWare
在我的冰激凌三明治安卓系统中,长按HOME键会显示最近使用的应用程序列表,并在底部显示“任务管理器”按钮。当我点击它时,我可以进入任务管理器,在那里我可以看到我的打开应用程序、RAM、内存等信息。在那里,我可以点击“关闭”按钮。这就是我的意思...谢谢! - Erel Hansav
@ErelHansav:这是您的设备独有的东西。它不是 Android 的一部分,而是您的设备制造商添加到 Android 中的内容。 - CommonsWare
@CommonsWare,有没有其他方法可以实现这种行为? - Maddy

1
使用AlarmManager类,即使您的设备处于睡眠模式下也可以正常工作。
private static Intent alarmIntent = null;
private static PendingIntent pendingIntent = null;
private static AlarmManager alarmManager = null;


// First Creating an Intent
alarmIntent = new Intent ( context, yourClass.class );
// Create an Pending Intent which will Broadcast the Intent
pendingIntent = PendingIntent.getBroadcast(context, 234324243, alarmIntent, 0 );
// Set the AlarmManager class
alarmManager = ( AlarmManager ) context.getSystemService( ConstantCodes.ALARM_SERVICE );
// Set Repeating time interval
alarmManager.setRepeating( AlarmManager.RTC_WAKEUP, Interval * 1000, Interval * 1000, pendingIntent );

AlarmManager 消耗的电量比 TimerTask 或 Thread 少。它的工作方式就像无痛的 AsyncTask。


我在这里阅读到:链接 说这是不可能的。 你所建议的和他们正在做的有什么不同吗? 谢谢! - Erel Hansav
AlarmManager没有被杀死。我在我的应用程序中使用相同的代码。 - Lucifer
ConstantCodes.ALARM_SERVICE 是什么?你是不是想说 Activity.ALARM_SERVICE ? - Erel Hansav
这是存储我项目所有常量的主类文件。 - Lucifer
为了从另一个类中停止它,我需要这样做吗: alarmIntent = new Intent(context, ChildCheckService.class); pendingIntent = PendingIntent.getBroadcast(context, 234324243, alarmIntent, 0); AlarmManager.cancel(pendingIntent)? 还是有其他方法?谢谢。 - Erel Hansav
是的,它实际上会重新启动/重新加载它。 - Lucifer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接