0

我正在尝试实现委托模式以通知 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*/
  ...
  /**/
}

问题显然是我不能按意图发送我的活动,因为它既不是可序列化的也不是可打包的。有没有办法用 Intent 发送活动?我想做的事情很愚蠢,有更合理的方法可以做到吗?我在Android上是全新的......

谢谢!

4

2 回答 2

2

有没有办法用 Intent 发送活动?

不。

我想做的事情很愚蠢,有更合理的方法可以做到吗?

合同模式非常好,只是不适用于使用命令模式的活动<->服务通信。这是一种松耦合模式,它与合约(您称之为委托)模式背道而驰。

此外,如果您将命令模式与服务一起使用,那么首先使用服务的原因是因为活动可以消失,而服务会结束其部分工作。这就是这里使用松散耦合的原因。

更典型的服务方法是使用消息传递:

  • LocalBroadcastManager
  • 第三方事件总线,例如Square 的 Otto
  • 一个Messenger
  • 等等

如果活动存在,则让服务引发活动可以订阅的事件。

如果该服务仅在活动进行时提供,您可能希望重新考虑为什么首先提供该服务。如果服务有合法需求,您可以使用绑定模式 ( bindService()),在这种情况下,您可以谨慎使用您的合约/委托模式。

于 2013-09-20T15:34:37.347 回答
0

您必须使用AsyncTask类来执行异步操作。

在此处观看课程使用情况。

这里举个例子

于 2013-09-20T15:37:42.797 回答