Android初学习 - Service 中的 onStart 和 onStartCommand
2016-04-20 14:14
405 查看
在自定义的service中,写了onStart和onStartCommand,
@Override
public void onCreate() {
super.onCreate();
如果用 bindService 这种方式调用,onStart和onStartCommand都不会被调用到
如果是用StartService调用,两个都被调用到
查看google 文档
http://developer.android.com/reference/android/app/Service.html
onStart(Intent intent,
int startId)
This method was deprecated in API level 5. Implement
onStartCommand(Intent intent,
int flags, int startId)
Called by the system every time a client explicitly starts the service by calling
providing the arguments it supplied and a unique integer token representing the start request.
鉴于目前的代码基本都是运行在API5 以上的,所以直接干掉onStart.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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后一定能重启。
public class HttpWebService extends Service {
@Override
public void onCreate() {
super.onCreate();
.... @Override public void onStart(Intent intent, int startId) { // this will trigger AbstractBackgroundService.onStart() super.onStart(intent, startId); Log.d(LOG_TAG, "onStart" + intent); } @Override public int onStartCommand(Intent intent, int flags, int startId) { int retVal = super.onStartCommand(intent, flags, startId); Log.d(LOG_TAG, "onStartCommand" + intent); return retVal; } }
如果用 bindService 这种方式调用,onStart和onStartCommand都不会被调用到
this.bindService(new Intent(this, HttpWebService.class), new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { HttpWebService webService = ((HttpWebService.LocalBinder) service) .getService(); webService.SetServerListener(webListener); } @Override public void onServiceDisconnected(ComponentName name) { } }, Context.BIND_AUTO_CREATE);
如果是用StartService调用,两个都被调用到
Intent intent = new Intent("com.example.sharefiles.services.ShareServices.Test"); intent.setClass(getApplicationContext(), HttpWebService.class); intent.putExtra("enable", true); this.startService(intent);
查看google 文档
http://developer.android.com/reference/android/app/Service.html
onStart(Intent intent,
int startId)
This method was deprecated in API level 5. Implement
onStartCommand(Intent, int, int)instead.
onStartCommand(Intent intent,
int flags, int startId)
Called by the system every time a client explicitly starts the service by calling
startService(Intent),
providing the arguments it supplied and a unique integer token representing the start request.
鉴于目前的代码基本都是运行在API5 以上的,所以直接干掉onStart.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
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后一定能重启。
相关文章推荐
- Android上层访问HAL层(呼吸灯测试代码)
- Android布局RelativeLayout(相对布局)详解
- Android自定义View读取XML属性详解
- Android初学习 - onNewIntent()触发机制及注意事项
- Android DiskLruCache缓存完全解析(网易新闻)
- android 批量处理列表
- Android Studio 2.0和Android Studio 2.1 Beta 3下载分享
- adb获取android手机系统版本,已对应的api版本和硬件相关信息
- android 自己的思路写的订单管理界面
- android studio+Droid4x(海马玩)
- Android Scrollview 内部组件android:layout_height="match_parent"无效的解决办法
- EditText点击不弹出系统键盘,显示光标
- Android 开发中广播Broadcast 知识点
- Android触摸事件的传递顺序
- Android canvas绘制柱形统计图
- 关于androidstudio中SVN的两个按钮显示
- Android编程实用代码合集
- android自定义view-强大的点击灰色背景imageview
- Android内存分析命令
- Android毛玻璃效果侧滑菜单