我尝试使用Service
连接到bindService()
。
我可以在Service
的{{1}}方法中获得对onServiceConnected()
的引用。
我的问题是,如果我在ServiceConnection
中声明一个方法说downloadFile()
,并通过Service
中的Service
对象调用它,而不是调用Activity
和然后从startService()
调用downloadFile()
,那么两种方法之间有什么区别?
答案 0 :(得分:1)
这两种方法有什么区别?
您提出的方法是一种错误的方法,原因有三:
Activity
和Service
被视为 应用组件 。组件应被视为独立实体,其内部方法不会被其他组件/类直接调用。这样的 组件 应该使用Intent
启动,然后离开进行自己的工作。如果您不致电startService()
,那么您绝对不会启动Service
。那么你如何调用其中定义的方法呢?在Android中,手动创建 应用程序组件 类的实例是不受欢迎的。你永远不应该做像
new Service()
或
new Activity()
这很糟糕,你会招来很多麻烦。
如果您要直接从downloadFile()
致电Activity
,那么为什么首先将其放入Service
?这不是多余的吗?将其置于Service
的原因是下载操作是非UI任务,不需要用户交互,这是Service
的意思。另一方面,Activity
是基于UI的组件,明确用于用户交互。如果用户在下载过程中解除您的Activity
,那么当下载完成并且您的代码尝试在UI上发布数据时,会引发NullPointerException
。