Service、IntentService或AlarmManager方法的使用方式

3
我正在构建一个类似游戏的应用程序,我一直在阅读有关在后台、前台、警报等方面运行服务的不同方法,但我有点困惑。
我的应用程序将是这样的(例如):
- 用户在主界面中按下按钮,然后可以关闭应用程序 - 30分钟后Activity1打开 - 用户完成他需要在该活动中做的任何事情,触发下一个活动在2小时后开始 - 2小时后Activity2打开 - 用户也在那里完成了他需要做的所有事情,触发下一个活动 - 一天后Activity3打开,以此类推
什么是最佳方法?持续运行服务以打开这些活动,还是每次用户完成其中一个活动时设置新的警报?

如果你想消耗用户的电池,可以运行一个服务。但是最好使用Alarm Manager,因为Android可能会杀死长时间运行的服务。 - brummfondel
用户如何知道每个间隔都开始了活动? - 在按钮按下后使用“AlarmManager”触发意图。不要设置3个以上的闹钟。设置一个闹钟,当它响起时,再设置下一个闹钟。 - SQLiteNoob
活动可以播放声音,例如。设置多个闹钟不行吗? - KKO
1个回答

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);

这只是一个与闹钟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
        }
    }
}


希望这能有所帮助


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