在调研的过程中就了解到如果Service的onStartCommand方法返回值为START_STICKY时,那么Service在不久后就会尝试重启。。。。...如果在onStartCommand(Intent, int, int)返回恒为START_STICKY。...如果这里没有任何挂起的服务调用service,那么系统会通过空Intent调用onStartCommand(Intent, int, int)方法。...对START_STICKY的兼容,不保证service杀掉后调用onStartCommand(Intent, int, int)。...如果在onStartCommand(Intent, int, int)返回恒为START_STICKY。
文章目录 一、 Service 组件 onStartCommand 方法分析 1、 onStartCommand 函数返回值分析 2、 onStartCommand 函数 START_STICKY_COMPATIBILITY...返回值 3、 onStartCommand 函数 START_STICKY 返回值 4、 onStartCommand 函数 START_NOT_STICKY 返回值 5、 onStartCommand...方法分析 ---- 1、 onStartCommand 函数返回值分析 Service 的生命周期函数 onStartCommand 方法 , 返回一个整型值 ; Service 中的 mStartCompatibility...函数 START_STICKY 返回值 Service.START_STICKY : onStartCommand 方法返回该 START_STICKY 返回值时 , 如果在执行 onStartCommand...函数 START_NOT_STICKY 返回值 Service.START_NOT_STICKY : " 非粘性 " , onStartCommand 方法返回该返回值时 , 如果在执行 onStartCommand
但是每次调用startService,onStartCommand方法都会被调用。Service的onStart方法在API 5时被废弃,替代它的是onStartCommand方法。...onStartCommand返回参数讲解 控制service运行的主要方式有两种,主要是根据onStartCommand方法返回的数值。...方法传入的intent对象,然后Android系统会尝试再次重新创建该Service,并执行onStartCommand回调方法,但是onStartCommand回调方法的Intent参数为null,也就是...onStartCommand方法虽然会执行但是获取不到intent信息。...因此onstartCommand不会接收到任何null的intent。
(或者START_STICKY 、START_STICKY_COMPATIBILITY); } 先看下Google文档对于Service的onStartCommand常用的几个返回值的解释(不完全正确...): START_REDELIVER_INTENT Constant to return from onStartCommand(Intent, int, int): if this service's...跟START_STICKY都会重启Service,并且START_REDELIVER_INTENT会将最后的一个Intent传递给onStartCommand。...--普通的触发onStartCommand--> res = s.onStartCommand(data.args, data.flags, data.startId);...对于START_STICKY需要重启,之前说过了,但是怎么标记需要重新调用onStartCommand呢?
与生命周期有关的方法 onCreate : 创建服务 onStart : 开始服务,Android2.0以下版本使用 onStartCommand : 开始服务,Android2.0及以上版本使用...随后系统会尝试重新创建服务,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand方法。如果在此期间没有任何启动命令送给服务,那么参数Intent将为空值。...:onDestroy Service的生命周期流程 单独启停服务 启动服务,方法调用顺序为:onCreate->onStartCommand。...2、绑定服务时,只调用onBind方法或者onRebind方法,不调用onStart和onStartCommand方法。...方法中记得调用父类的onStartCommand,因为Service类没有具体实现该方法但IntentService有具体实现,示例代码如下: @Override public int onStartCommand
2.2 编写MyService代码覆写 onCreate()、onStartCommand()、onDestroy() 函数,这里我们对这些函数分别加上日志;函数 onBind() 暂时不做处理。...(Intent intent, int flags, int startId) { Log.i(TAG, String.format("onStartCommand(flags:%d, startId...:%d)", flags, startId)); return super.onStartCommand(intent, flags, startId); } @Override..., flags: Int, startId: Int): Int { Log.i(TAG, "onStartCommand(flags:$flags, startId:$startId)"...) return super.onStartCommand(intent, flags, startId) } override fun onDestroy() {
(@Nullable Intent intent, int flags, int startId) { Log.e(TAG,"onStartCommand -->> startId : "+startId...* * If enabled is false (the default), * {@link #onStartCommand(Intent, int, int)} will return...如果为false,onStartCommand()方法会返回START_NOT_STICKY,如果进程死了,那么这个Intent也随着一起死了。...当实例化了一个IntentService后,后走onCreate()、onStart(),当用Intent开启一个Service时,会调用onStartCommand()。...onStartCommand()方法: @Override public int onStartCommand(@Nullable Intent intent, int flags, int startId
(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand"); return super.onStartCommand...(),每次调用startService(Intent)的时候,都会调用执行onStartCommand(); 如果Service已经运行,则只调用onStartCommand()。 ...我们要执行操作可在onStartCommand方法中定义,onStartCommand有4种返回值: START_STICKY:如果service进程被kill掉,保留service的状态为开始状态...使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。...(Intent intent, int flags, int startId) { Log.i(TAG, "onStartCommand"); return super.onStartCommand
Android开发的过程中,每次调用startService(Intent)的时候,都会调用该Service对象的onStartCommand(Intent,int,int)方法,然后在onStartCommand...从Android官方文档中,我们知道onStartCommand有4种int返回值,首先简单地讲讲int返回值的作用。...一、onStartCommand有4种返回值: START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。...随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。...使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
接下来从生命周期的角度来看看这个IntentService,因为Binder机制上是一致的,所以分析主线就是onCreate() --> onStartCommand() --> onDestroy()...onStartCommand() public int onStartCommand(@Nullable Intent intent, int flags, int startId) {.../** * Constant to return from {@link #onStartCommand}: if this service's * process is killed...while it is started (after returning from * {@link #onStartCommand}), and there are no new start...The * service will not receive a {@link #onStartCommand(Intent, int, int)} * call with a null
"MyService", "onCreate------------"); } @Override @Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand...intent, startId); Log.i("MyService", "onStart------------"); } @Override//启动时会调用 public int onStartCommand...Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.i("MyService", "onStartCommand..."onCreate------------"); } @Override @Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand...(Onstart) 当我接着按启动服务时: 可以看到当服务再次启动后,再次启动服务,会只调用OnStartCommand函数的 接着销毁服务: 可以看到服务销毁了,同时我们的线程任务也停止了。
问题只是在于您是否实现了一组回调方法:onStartCommand()(允许组件启动服务)和 onBind()(允许绑定服务)。...Android 系统调用服务的 onStartCommand() 方法,并向其传递 Intent。...Android 系统调用服务的 onStartCommand() 方法,并向其传递 Intent。...(1)第一次调用startService()方法时,onCreate()方法、onStartCommand()方法将依次被调用,而多次调用startService()时,只有onStartCommand...即使为服务启用了绑定,一旦服务收到对 onStartCommand() 的调用,您始终仍须亲自停止服务。
(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand() executed");...()方法;2.如果service已处于运行中,调用startService()不会执行onCreate()方法,只执行onStartCommand()方法。...onStartCommand() 如果多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。...onStartCommand()方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。...()方法,但是当我们第二次点击的时候就只会执行 onStartCommand()方法。
stopService(new Intent(MainActivity.this,MyService.class)); } }); ///////// —-MyService //重写onStartCommand...方法 //执行到startService中执行这个方法 @Override public int onStartCommand(Intent intent, int flags, int startId...e.printStackTrace(); } } } }.start(); return super.onStartCommand
() { Log.i("myIntentService", "onCreate"); super.onCreate(); } /** * 复写onStartCommand...()方法 * 默认实现 = 将请求的Intent添加到工作队列里 **/ @Override public int onStartCommand(Intent intent..., int flags, int startId) { Log.i("myIntentService", "onStartCommand"); return super.onStartCommand...() 将Intent 传递给服务 & 依次插入到工作队列中 /** * onStartCommand()源码分析 * onHandleIntent() = 抽象方法,使用时需重写 **/...public int onStartCommand(Intent intent, int flags, int startId) { // 调用onStart()->>分析1 onStart
onCreate() { super.onCreate(); Log.d(TAG, "onCreate()"); } @Override public int onStartCommand...(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand()"); } @Override public...throw new UnsupportedOperationException("Not yet implemented"); } } 修改onStartCommand代码,添加通知: @Override...public int onStartCommand(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand()");... notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音 } 在完成Notification通知消息的构建后,在Service的onStartCommand
public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate"); } @Override public int onStartCommand...(Intent intent, int flags, int startId) { Log.d(TAG, "onStartCommand"); return super.onStartCommand...onStartCommand(Intent intent, int flags, int startId) 每次服务启动时调用该方法。 void onDestroy() 服务销毁时调用该方法。...执行结果: D/FirstService: onCreate D/FirstService: onStartCommand D/FirstService: onDestroy **注意:**onCreate...() 在第一次创建服务时被调用,而 onStartCommand() 会在每次启动服务时被调用。
问题只是在于您是否实现了一组回调方法:[onStartCommand()](https://developer.android.com/reference/android/app/Service.html...#onStartCommand(android.content.Intent, int, int)) (允许组件启动服务)和 onBind() (允许绑定服务)。.../android/app/Service.html#onStartCommand(android.content.Intent, int, int)) 或onBind() 之前)。...onStartCommand() 当另一个组件(如 Activity)通过调用 startService() 请求启动服务时,系统将调用此方法。一旦执行此方法,服务即会启动并可在后台无限期运行。...关于onStartCommand返回值可以查看Service之onStartCommand剖析笔记 onBind() 当另一个组件想通过调用 [bindService()](https://developer.android.com
"MyService", "onCreate------------"); } @Override @Deprecated//OnStart方法现在被OnStartCommd已经取代,其实在OnStartCommand...intent, startId); Log.i("MyService", "onStart------------"); } @Override//启动时会调用 public int onStartCommand...Intent intent, int flags, int startId) { // TODO Auto-generated method stub Log.i("MyService", "onStartCommand...------------"); return super.onStartCommand(intent, flags, startId); } } 当我点击Button按钮是,就会启动Service
如何免死 3.1 onStartCommand方法中,返回START_STICKY 在StartCommand()几个常量: START_STICKY 系统重新创建服务并且调用onStartCommand...START_REDELIVER_INTENT 系统重新创建服务并且调用onStartCommand()方法,传递最后一次传递的intent。其余存在的需要传递的intent会按顺序传递进来。...intonStartCommand(Intent intent, int flags, int startId) { flags = START_STICKY; return super.onStartCommand...@Overridepublic int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated
领取专属 10元无门槛券
手把手带您无忧上云