我有一个Plugin.java
类,我在其中定义了两种方法,一种是使用 JobScheduler(如果 API >= 21),另一种是使用 AlarmManager(如果 API < 21)。
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
scheduleDeleteJobScheduler(...);
} else {
scheduleDeleteAlarmManager(...);
}
}
scheduleDeleteJobScheduler() 方法使用 JobService 删除我在数据库中的一些旧条目。
public class ScheduleDeleteService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
deleteOldEntries();
jobFinished(params, false);
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
public void deleteOldEntries(){...}
}
scheduleDeleteAlarmManager() 方法使用 BroadcastReceiver 来做与 JobService 相同的事情。
public class ScheduleDeleteReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
deleteOldEntries();
}
public void deleteOldEntries(){...}
}
这两个类都调用 deleteOldEntries() 方法从数据库中删除旧条目。此方法对(JobService 和 BroadcastReceiver)都是相同的。我想要做的是避免有两种实现相同的方法。
- 因为我已经在扩展 JobService 和 BroadcastReceiver,所以我不能使用 Abstract 或 Super 类。我知道 Java 不允许我扩展多个类,因为它会导致编译器无法决定使用哪个超类方法的“钻石问题”。
- 通过使用接口,我只能声明没有实现的方法(方法签名)。
- 我知道我可以使用静态和默认方法(使用接口),但它们是在 Java 8(Android Nougat - API 24)中引入的。因此,如果我使用它们,使用 JobScheduler (API >= 21) 和 AlarmManager (API < 21) 的整个逻辑将毫无意义。
我可以让另一个类实现该方法,然后从 ScheduleDeleteService (JobService) 和 ScheduleDeleteReceiver (BroadCastReceiver) 类中调用它,但我想要一些建议来帮助我更好地实现。