我有一个 Android 应用程序,它使用 AlarmManager 来安排事件。当收到来自 AlarmManager 的 Intent 时,域逻辑必须做一些工作,包括访问数据库和广播意图。目前我使用单例从广播接收器(在清单中注册)以某种方式访问域逻辑:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Singleton.getInstance().onAlarmFired();
}
}
这个 Singleton 以相同的方式用于活动和服务中。它工作得很好,但是 Singleton 被认为是一种反模式,我想用测试来覆盖代码,所以我正在寻找一个不同的解决方案。
现在的问题是使用 Service 而不是这个 Singleton 不是更好吗?像这样:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
startService(new Intent(intent.getAction());
}
}
有什么好处和坏处?从 Activity 与服务进行通信的最佳方式是什么?我正在考虑绑定到 MyApplication 中的服务,并使用 getApplication() 方法提供对活动和服务的引用。