其他分享
首页 > 其他分享> > android-Service或IntentService或AlarmManager方法

android-Service或IntentService或AlarmManager方法

作者:互联网

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

我的应用程序将如下所示(示例):

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

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

解决方法:

请不要仅仅因为它可以闲置几个小时而创建服务.这个不成立.

您需要做的是创建一个警报.就像是:

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

希望能帮助到你

标签:intentservice,alarmmanager,android,service
来源: https://codeday.me/bug/20191029/1959523.html