Android IntentService 只执行一次

标签 android intentservice

我正在使用 Android AlarmManger 安排 IntentService 在较小的间隔后运行。

这是我的 AlarmManger:

static void setNextSchedule(Context ctx, long interval){
        AlarmManager manager = (AlarmManager) ctx.getSystemService(Context.ALARM_SERVICE);
        Intent nIntent = new Intent(ctx, DService.class);
        PendingIntent pIntent = PendingIntent.getActivity(ctx, 1, nIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        manager.setRepeating(AlarmManager.ELAPSED_REALTIME, 
                SystemClock.elapsedRealtime() + interval, interval, pIntent);

        Log.i(ScheduleAlarm.class.getSimpleName(), "Next alarm set");
    }

还有我的 IntentService:

@Override
    protected void onHandleIntent(Intent intent) {
        Log.i(DService.class.getSimpleName(), "Service starting");

        ScheduleAlarm.setNextSchedule(getApplicationContext(), 15000);
    }

目前它只包含用于测试的代码。 现在,一旦应用程序启动,这段代码将成功运行,没有任何问题,但 15 秒后,它会在 logcat 中声明服务正在启动,但代码不会执行

如何在每次运行时获取互联网服务并执行onHandleIntent中的代码?

谢谢

最佳答案

当使用 PendingIntent 时,工厂方法需要匹配您的 Intent 适用的组件类型:

  • 如果您的Intent 指向一个 Activity ,请使用getActivity()

  • 如果您的Intent 指向服务,请使用getService()

  • 如果您的Intent 指向BroadcastReceiver,请使用getBroadcast()

  • 如果您的Intent 指向以上任何一个,直接进 jail ,不通过 Go!,不收取 200 美元:-)

关于Android IntentService 只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648292/

相关文章:

java - 如何保存ArrayList <List>

android - Intent 服务中的静态 block 抛出 NetworkOnMainThreadException

android - 用于将大型(2 GB)文件上传到 android 中的服务器的服务/IntentService

android - mylib.so 有文本重定位。这是浪费内存并且存在安全风险。请修复

android - 开源文件转换为可闪存 .img ??如何?

java - 使用 Retrofit 从 REST 获取响应时出现 NullPointer

android - 如何在 Android 后台监控电池电量?

android - 从 Activity 中更新 IntentService 的数据

android - Intent 服务生命周期

android - “adb shell am set-inactive <packageName> true “does' t 工作