要解决Android服务不总是活动的问题,可以使用以下代码示例:
public class MyService extends Service {
private static final int SERVICE_NOTIFICATION_ID = 1;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 创建通知并将服务设置为前台服务
Notification notification = createNotification();
startForeground(SERVICE_NOTIFICATION_ID, notification);
// 执行服务的实际操作
// 返回START_STICKY,使服务在被系统杀死后能够自动重启
return START_STICKY;
}
private Notification createNotification() {
// 创建通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notification)
.setContentTitle("My Service")
.setContentText("Service is running");
// 创建通知渠道(适用于Android 8.0及以上版本)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, "My Service", NotificationManager.IMPORTANCE_DEFAULT);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
}
// 返回通知
return builder.build();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
public class MyService extends Service {
private static final long INTERVAL = 60 * 1000; // 1分钟
private AlarmManager alarmManager;
private PendingIntent pendingIntent;
@Override
public void onCreate() {
super.onCreate();
// 创建PendingIntent用于启动服务
Intent intent = new Intent(this, MyService.class);
pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 创建AlarmManager并设置定期启动服务
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), INTERVAL, pendingIntent);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// 执行服务的实际操作
// 返回START_STICKY,使服务在被系统杀死后能够自动重启
return START_STICKY;
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onDestroy() {
super.onDestroy();
// 取消定期启动服务
alarmManager.cancel(pendingIntent);
}
}
请注意,在AndroidManifest.xml文件中申明服务:
使用以上方法之一可以确保Android服务不会被系统杀死并保持活动状态。
上一篇:Android服务崩溃行为