这个是在startService (Intent service) 方法之后由系统调用的,传入相关的参数,类似activity的onStart。 在创建Service后也就是onCreate后调用,创建一次后以后每次启动该服务都直接调用onstartcommand。 是android2.0以后引进的取代service的onstart()方法,也就是说在之前的版本是没有的,如下面这个帖子说明的情况
在Mars的Android视频的25集Service中,继承了Service类。依视频写代码,却发现没有public intonStartCommand (Intent intent, int flags, int startId)可以覆写。查了一下API文档,在示例代码的onStart方法注释之中有这样两句话: view plaincopy to clipboardprint? 1 // This is the old onStart method that will be called on the pre-2.0 2 // platform. On 2.0 or later we override onStartCommand() so this 3 // method will not be called. 看到这里才恍然大悟,原来onStart方法是在Android2.0之前的平台使用的.在2.0及其之后,则需重写onStartCommand方法,同时,旧的onStart方法则不会再被调用.
This method is deprecated. Implement onStartCommand(Intent, int, int) instead. 意思就是不赞成使该方法。该方法的实现已经被onStartCommand所代替。 看来还是以前的惯性思维啊。之前建工程的时候一直都是选以1.6为最低的平台,这次也选了这个,难怪会在重写的时候没有这个方法了。另外,看到视频后面,在AndroidManifest.xml中果然看到了这样一句: 1 </pre><pre name="code" class="html"><use-sdk android:minSdkVersion="7" /> 最低平台为7,貌似就是Android2.1啊。 Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand方法中做一些处理。然后我们注意到这个函数有一个int的返回值,这篇文章就是简单地讲讲int返回值的作用。 从Android官方文档中,我们知道onStartCommand有4种返回值: START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。 START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。 START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。 START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。 |
|