如何在Intent中传递一个Activity

时间:2013-09-20 15:28:23

标签: android android-intent

我正在尝试实现委托模式,以通知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上是全新的......

谢谢!

2 个答案:

答案 0 :(得分:2)

  

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

没有

  

我想做的是愚蠢的,有更合理的方法吗?

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

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

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

  • LocalBroadcastManager
  • 第三方活动总线,如Square's Otto
  • a Messenger

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

如果服务仅在活动期间进行,您可能希望重新考虑您首先获得服务的原因。如果对服务有合理需求,您可以使用绑定模式(bindService()),在这种情况下,您可以小心地使用您的合同/委托模式。

答案 1 :(得分:0)

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

观看here了解课程用法。

here为例。