我正在构建一个类似游戏的应用程序,我一直在阅读有关在后台、前台、警报等中使用服务运行事物的所有不同方法,但我有点困惑。
我的应用会像这样(示例):
- 用户按下 Main 中的一个按钮,然后他可以关闭应用程序
- 30 分钟后 Activity1 打开
- 用户在该 Activity 中完成了他需要做的任何事情,这 触发下一个 Activity 在 2 小时后开始
- 2 小时后 Activity2 打开
- 用户也在那里完成了他需要做的任何事情,触发了 下一个
- 一天后 Activity3 打开,依此类推
什么是最好的方法?是否有持续运行的服务来打开这些 Activity ,或者设置一个新的警报以在用户每次完成其中一项 Activity 时启动?
最佳答案
请不要创建一个服务,因为它可以闲置几个小时。这没有意义。
您需要做的是创建一个警报。像这样的东西:
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
AlarmManager.INTERVAL_DAY, alarmIntent);
这只是 Alarm API 的一般示例.您需要根据自己的需要进行调整。
最后 - 请注意:警报无法启动!即:如果出于任何原因
用户的设备出现故障,您的所有警报都将丢失。
如果您确实希望您的应用具有启动弹性,您需要注册一个 名为 RECEIVE_BOOT_COMPLETED 的事件(想想启动后),您将在其中重新启动待定的 警报:
//manifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<receiver android:name=".MyBootReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
//java class
public class MyBootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
// restart alarms
}
}
}
希望对你有帮助
关于android - 服务或 IntentService 或 AlarmManager 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24586199/