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

时间:2015-01-21 08:15:48

标签: android

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

如何创建?

5 个答案:

答案 0 :(得分:6)

您可以使用以下服务

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

即使应用被杀,此服务也会自动启动,并且后续广告将会运行

答案 1 :(得分:0)

有关“如何使用服务”的信息,请参阅
Services - Android
Services in Android - Vogella

这是一个明确的解决方案,使用AlarmManager专注于“每10分钟”部分:https://stackoverflow.com/a/10222390/2591556

答案 2 :(得分:0)

假设您有正在运行的服务

用户AlarmManager每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
     }

答案 3 :(得分:0)

你可以写一份后台服务: Running in a Background Service

并且每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);
    }

答案 4 :(得分:0)

您可以使用警报管理器,该警报管理器每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, r5, 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>

您将必须创建Receiver,在其中您将以上面指定的AlarmReceiver_.class名称接收数据