直接调用服务方法而不是使用startService()

时间:2015-04-18 16:38:16

标签: android android-intent android-activity android-service android-lifecycle

我尝试使用Service连接到bindService()。 我可以在Service的{​​{1}}方法中获得对onServiceConnected()的引用。

我的问题是,如果我在ServiceConnection中声明一个方法说downloadFile(),并通过Service中的Service对象调用它,而不是调用Activity和然后从startService()调用downloadFile(),那么两种方法之间有什么区别?

1 个答案:

答案 0 :(得分:1)

  

这两种方法有什么区别?

您提出的方法是一种错误的方法,原因有三:

  • 在Android中,ActivityService被视为 应用组件 。组件应被视为独立实体,其内部方法不会被其他组件/类直接调用。这样的 组件 应该使用Intent启动,然后离开进行自己的工作。
  • 如果您不致电startService(),那么您绝对不会启动Service。那么你如何调用其中定义的方法呢​​?在Android中,手动创建 应用程序组件 类的实例是不受欢迎的。你永远不应该做像

    这样的事情
    new Service()
    

    new Activity()
    

    这很糟糕,你会招来很多麻烦。

  • 如果您要直接从downloadFile()致电Activity,那么为什么首先将其放入Service?这不是多余的吗?将其置于Service的原因是下载操作是非UI任务,不需要用户交互,这是Service的意思。另一方面,Activity是基于UI的组件,明确用于用户交互。如果用户在下载过程中解除您的Activity,那么当下载完成并且您的代码尝试在UI上发布数据时,会引发NullPointerException