如何每 10 分钟在后台运行一次服务



我想使用无限期在后台运行的服务,每 10 分钟调用一次方法它的运行甚至应用程序被杀

如何创建它?

您可以使用服务来执行此操作,如下所示

@Override
  public int onStartCommand(Intent intent, int flags, int startId) {
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //performe the deskred task
        }
    }, 10minutes time in milisecods);
      // If we get killed, after returning from here, restart
      return START_STICKY;
  }

即使应用程序被杀死,此服务也会自动启动,并且延迟后将运行

有关"如何使用服务",请参阅
服务 - 安卓
安卓服务 - Vogella

以下是使用 AlarmManager 专注于"每 10 分钟"部分的清晰解决方案: https://stackoverflow.com/a/10222390/2591556

假设您有一个正在运行的服务

用户警报管理器每 10 分钟运行一次服务

   AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent i = new Intent(context, YourService.class);
         PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
         am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 600000, pi); // Millisec * Second * Minute
     }

你可以编写一个后台服务:在后台服务中运行

并每 10-11 分钟启动一次服务(导致 AlarmManager 节能行为),或使用 AlarmManager.setExact 以精确的时间启动服务(每次都需要执行下一次执行)

例:

private static PendingIntent createClockIntent(Context context) {
        Intent intent = new Intent(context.getString(R.string.widget_broadcast_clock_update));
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context.getApplicationContext(), 1,
                intent, PendingIntent.FLAG_UPDATE_CURRENT);
        return pendingIntent;
    }
    public static void startClockAlarm(Context context) {
        AlarmManager alarmManager = (AlarmManager) context
                .getSystemService(Context.ALARM_SERVICE);
        clockIntent = createClockIntent(context);
        alarmManager.setRepeating(AlarmManager.RTC, 0,
                600000, clockIntent);
    }

您可以使用每 10 分钟调用一次的警报管理器

        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Random random = new Random();
        int m = random.nextInt(9999 - 1000) + 1000;
        Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
        notificationIntent.setClass(this,AlarmReceiver_.class);
        notificationIntent.addCategory("android.intent.category.DEFAULT");
        PendingIntent broadcast = PendingIntent.getBroadcast(YourClass.this, m, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + 300000L,
                600000L, broadcast);

ManiFest接收器代码,您将获得接收器响应

<receiver android:name="com.yourpackage.AlarmReceiver_"
        >
        <intent-filter>
            <action android:name="android.media.action.DISPLAY_NOTIFICATION" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <action android:name="android.intent.action.REBOOT" />
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

您必须创建接收器,您将在其中接收数据作为上述指定的AlarmReceiver_.class名称

相关内容

  • 没有找到相关文章

最新更新