我想使用无限期在后台运行的服务,每10分钟调用一次方法 它的运行甚至是应用程序被杀
如何创建?
答案 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名称接收数据