2017-07-27 82 views
0

与最新版本的SDK目前服务类具有覆盖方法的Android服务onStartCommand方法PARAM使用

INT onStartCommand(意向意图,诠释旗帜,INT startId)

&它已经取代了下面这是引入Android 2.0(API级别5)。

无效在onStart(意向意图,诠释startid)

我的问题是:

  1. 有什么用则params的像国旗& startId作为参数传递?
  2. 我们如何操纵这些参数?

更新 1,2:清除:)

标志 PARAM snapcode明确的使用情况。如果你的服务开始返回,那么它将被接收为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中调用仍然是个问题?任何人 !!

+0

你看过这些参数的Android文档? –

+0

是的.. [绝对](https://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent,%20int,%20int))但没有得到使用标志& startId。我们如何操纵? – CoDe

回答

1

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

flagsint
了解这个开始请求附加信息。 值为0或START_FLAG_REDELIVERYSTART_FLAG_RETRY的组合。

那些不变的标志在同一页面

其中输入是来自这不是我清楚描述,但你把该整数按位OR,例如

return flags | START_REDELIVER_INTENT; 

而且

startIdint
独特INTE ger代表这个特定的请求开始。与stopSelfResult(int)一起使用。

因此,ID被用于记录和获取的句柄服务停止它

+0

感谢分享,我在更新的问题中增加了几点。 – CoDe

+0

'startId'可以保存到扩展Service类的字段中,并且可以通过自己的'getId()'方法公开它 –

相关问题