我正在尝试实现委托模式,以通知UI异步操作的进程。所以我有一个这样的界面:
public interface UpdateLibraryDelegate {
public void startDownloadingLibrary();
public void endDownloadingLibrary();
public void processingLibrary(int progress);
public void endProcessingLibrary();
}
我有一个活动:
public class HomeActivity implements UpdateLibraryDelegate{
protected void onCreate(Bundle savedInstanceState) {
...
Intent libraryIntent = new Intent(this, MyService.class);
/*Here is where the problem is*/
libraryIntent.putExtra(UPDATE_LIBRARY_DELEGATE, this);
...
}
/*Methods of the interface*/
...
/**/
}
问题显然是我无法在意图中发送我的活动,因为它不是Serializable或Parcelable。有没有办法用Intent发送活动?我想要做的是愚蠢的,有更合理的方法吗?我在Android上是全新的......
谢谢!
答案 0 :(得分:2)
有没有办法用Intent发送活动?
没有
我想做的是愚蠢的,有更合理的方法吗?
合同模式非常好,不适用于使用命令模式的活动< - >服务通信。这是一种松耦合模式,与合同(你称之为委托)模式背道而驰。
此外,如果您将命令模式与服务一起使用,那么首先获得服务的原因是因为活动可以消失,而服务包含其工作。这就是为什么在这里使用松散耦合的原因。
更典型的服务方法是使用消息传递:
LocalBroadcastManager
Messenger
如果活动存在,则让服务引发活动可以订阅的事件。
如果服务仅在活动期间进行,您可能希望重新考虑您首先获得服务的原因。如果对服务有合理需求,您可以使用绑定模式(bindService()
),在这种情况下,您可以小心地使用您的合同/委托模式。
答案 1 :(得分:0)