直接调用 Service 的方法而不是使用 startService()
Calling a method of Service directly instead of using startService()
我正在尝试使用 bindService()
连接到 Service
。
我能够在 ServiceConnection
的 onServiceConnected()
方法中获得对 Service
的引用。
我的问题是,如果我在 Service
中声明一个方法 say downloadFile()
并通过 Activity
中的 Service
对象调用它,而不是调用 startService()
然后从 onStartCommand()
调用 downloadFile()
,那么这两种方法有什么区别?
What is the difference between the two approaches ?
您提出的方法是一种错误的方法,原因有以下三个:
- 在Android中,
Activity
和Service
被认为是app组件.一个组件应该被视为一个独立的实体,其内部方法不被其他人直接调用components/classes。这样的 component 应该使用 Intent
开始,然后留下来做自己的工作。
如果你不调用 startService()
,你就永远不会启动 Service
。那么您将如何调用其中定义的方法?手动创建 类 的 应用程序组件 的实例在 Android 中是不受欢迎的。你永远不应该做像
这样的事情
new Service()
或
new Activity()
这很糟糕,你会招来很多麻烦。
如果您打算直接从您的 Activity
调用 downloadFile()
,那么为什么首先将它放在 Service
中?那不是多余的吗?将它放在 Service
中的原因是下载操作是一个非 UI 任务,不需要用户交互,这就是 Service
的意思。另一方面,Activity
是基于 UI 的组件,明确用于用户交互。如果用户在下载过程中关闭了您的 Activity
,那么当下载完成并且您的代码尝试 post UI 上的数据时会抛出 NullPointerException
。
我正在尝试使用 bindService()
连接到 Service
。
我能够在 ServiceConnection
的 onServiceConnected()
方法中获得对 Service
的引用。
我的问题是,如果我在 Service
中声明一个方法 say downloadFile()
并通过 Activity
中的 Service
对象调用它,而不是调用 startService()
然后从 onStartCommand()
调用 downloadFile()
,那么这两种方法有什么区别?
What is the difference between the two approaches ?
您提出的方法是一种错误的方法,原因有以下三个:
- 在Android中,
Activity
和Service
被认为是app组件.一个组件应该被视为一个独立的实体,其内部方法不被其他人直接调用components/classes。这样的 component 应该使用Intent
开始,然后留下来做自己的工作。 如果你不调用
这样的事情startService()
,你就永远不会启动Service
。那么您将如何调用其中定义的方法?手动创建 类 的 应用程序组件 的实例在 Android 中是不受欢迎的。你永远不应该做像new Service()
或
new Activity()
这很糟糕,你会招来很多麻烦。
如果您打算直接从您的
Activity
调用downloadFile()
,那么为什么首先将它放在Service
中?那不是多余的吗?将它放在Service
中的原因是下载操作是一个非 UI 任务,不需要用户交互,这就是Service
的意思。另一方面,Activity
是基于 UI 的组件,明确用于用户交互。如果用户在下载过程中关闭了您的Activity
,那么当下载完成并且您的代码尝试 post UI 上的数据时会抛出NullPointerException
。