android - 服务或 IntentService 或 AlarmManager 方法

标签 android service alarmmanager intentservice

我正在构建一个类似游戏的应用程序,我一直在阅读有关在后台、前台、警报等中使用服务运行事物的所有不同方法,但我有点困惑。

我的应用会像这样(示例):

  • 用户按下 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/

相关文章:

service - 如何在微服务架构中建模服务依赖?

java - 闹钟管理器唤醒

java - 底部导航栏未在 Activity 中显示

java - 似乎无法解决此 NullPointerException

android - 从服务中将 PlayerView 与 SimpleExoPlayer 绑定(bind)

java - Android:每 X 小时从服务器更新一些天气数据

android - 使用 AlarmReceiver 和 OnBootReceiver 为 android 应用程序设置闹钟

java - 在 PCL 的 Project Tango 中可视化点云

关于覆盖 url 加载的 Android WebView 问题

android - 无法启动服务 Intent { cmp=com.marie.mainactivity/.BackgroundService } : not found