服务或IntentService或AlarmManager方法

时间:2014-07-05 12:00:14

标签: android service alarmmanager intentservice

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

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

  • 用户按下Main中的按钮,然后他可以关闭应用
  • 30分钟后,Activity1打开
  • 用户完成了他在该活动中需要做的任何事情 触发下一个活动在2小时后开始
  • 2小时后,Activity2打开
  • 用户也完成了他需要做的任何事情,触发了 下一个
  • 一天后,Activity3打开,依此类推

最好的方法是什么?是否有连续运行的服务来打开这些活动,或者每次用户完成其中一项活动时都会设置新的警报?

1 个答案:

答案 0 :(得分:4)

请不要创建服务,因为它可以闲置几个小时。这毫无意义。


您需要做的是创建一个警报。类似的东西:

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
        }
    }
}


希望它有所帮助