【问题标题】:Android service onStartCommand method param usesAndroid 服务 onStartCommand 方法参数使用
【发布时间】:2018-01-02 12:43:05
【问题描述】:

现在更新了 SDK 版本服务类有覆盖方法

int onStartCommand (Intent intent, int flags, int startId)

& 它已取代 Android 2.0(API 级别 5)引入的以下内容。

void onStart(Intent intent, int startid)

我的问题是:

  1. flag 和 startId 等参数作为参数传递有什么用?
  2. 我们如何操作这些参数?

更新 1. 2:清除:)

按照 snapcode 清除 flags 参数的用例。默认它接收为 0,如果您的服务重新启动,那么它将收到我们从 onStartCommand(..) 方法返回的标志。

void readFlags(int flags) {
    switch (flags) {
        case START_FLAG_REDELIVERY:
        case START_FLAG_RETRY:
            // restarted by system, might be kill app form stack.
            break;

        default:
            // on regular startService call from client.
    }
}

startID非常清楚,每当你调用stopSelf你应该用这个startID调用,所以如果服务有多个客户端的运行请求那么它不会杀死服务,它会简单地停止为这个 startID 工作。它由系统生成,无需操作:)。

3. 但是如何管理这个 startID 来调用 stopSelf 仍然是一个问题?随便一个!!

【问题讨论】:

  • 您是否阅读了有关这些参数的 Android 文档?
  • yes..definitely 但没有使用标志和 startId。以及我们如何操纵?

标签: android service


【解决方案1】:

首先,文档明确表示不要自己调用这些方法,因此您可以在其他地方操作它们。

flagsint:
有关此启动请求的其他数据。 值为 0 或START_FLAG_REDELIVERYSTART_FLAG_RETRY 的组合。

那些常量标志在同一页中描述

我不清楚该输入来自何处,但您将该整数与按位 OR 组合,例如

 return flags | START_REDELIVER_INTENT; 

还有

startIdint:
表示此特定启动请求的唯一整数。与stopSelfResult(int) 一起使用。

因此,id 用于记录并获取服务的句柄以停止它

【讨论】:

  • startId可以保存到扩展Service类的一个字段中,你可以通过自己的getId()方法暴露它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多