我正在构建一个类似游戏的应用程序,我一直在阅读关于后台、前台、警报等服务运行的所有不同方法,我有点困惑。
我的应用程序将如下所示(示例):
用户在main中按下一个按钮,就可以关闭应用程序
30分钟后活动1打开
用户完成了他在该活动中需要做的任何事情,
触发2小时后开始的下一个活动
2小时后活动2打开
用户也完成了他需要做的事情,触发了
下一个
一天之后活动3打开,依此类推
最好的方法是什么?是否有一个服务持续运行以打开这些活动,或者在用户每次完成一个活动时设置一个新的警报以启动?

最佳答案

请不要只为它创建一个可以闲置几个小时的服务。这毫无意义。
你需要做的是制造一个警报。类似于:

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

希望有帮助

10-07 19:36
查看更多