android service 之一 (start service)
2016-01-14 10:57
519 查看
我们有两种方式(start与bind)启动一个Service,每一种方式启动的Service生命周期是不一样的,这篇贴子主要写的是 start service。
它的生命周期中只有三个阶段:onCreate, onStartCommand(取代原来的onStart方法), onDestroy。如下图:
需要注意的有:
① 如果是 调用者 直接退出而没有调用 stopService 的话,那么被启动的 Service 会一直在后台运行,直至其stopService 方法被调用,或者它自己调用stopSelf 方法。
② 在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStartCommand()方法。如果调用startService()方法前服务已经被创建,那么会直接调用onStartCommand()方法。也就是说,多次调用startService()方法并不会导致多次创建服务。另外,不管被 start 多少次,只需一次 stop 便可将相应的service关闭。
③ 具体的操作应该放在 onStartCommand() 里面
以下通过截图来看:
上图的中的四个按钮均是针对于同一个Service进行的操作,此时去 application ,可以查看到 "Running Service" 的列表如下:
这个,我们去点击上面的按钮(分别点击startservice 1 和 2 各两次),结果如下:
从图中,我们可以看出, onCreate() 方法只在第一次创建服务的时候被调用了。
现在,通过“返回键”来退回至主界面,然后再去 application 的 running service中去查看,可得下面的截图:
从此图中,我们可以看出,虽然Activity被finish掉了,但是由它启动的service仍然在后台运行着。
此时,重新打开该应用,然后直接点击 stop service 1 和 2 按钮各两次(不需再新点击 start service按钮),可以如下截图:
从此图中我们可以看出,只有第一次停止服务的时候,才会调用 onDestroy() 方法。
此时,再去 application 的 running service中去查看,可得下面的截图,发现服务确实已经被停止了:
下面附上部分源码(具体地请参见附件):
大小: 18 KB
大小: 38.5 KB
大小: 33.8 KB
大小: 44.9 KB
大小: 24.4 KB
ServiceDemo.zip (49.7 KB)
下载次数: 250
大小: 30.2 KB
大小: 26.2 KB
大小: 18.8 KB
查看图片附件
它的生命周期中只有三个阶段:onCreate, onStartCommand(取代原来的onStart方法), onDestroy。如下图:
需要注意的有:
① 如果是 调用者 直接退出而没有调用 stopService 的话,那么被启动的 Service 会一直在后台运行,直至其stopService 方法被调用,或者它自己调用stopSelf 方法。
② 在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStartCommand()方法。如果调用startService()方法前服务已经被创建,那么会直接调用onStartCommand()方法。也就是说,多次调用startService()方法并不会导致多次创建服务。另外,不管被 start 多少次,只需一次 stop 便可将相应的service关闭。
③ 具体的操作应该放在 onStartCommand() 里面
以下通过截图来看:
上图的中的四个按钮均是针对于同一个Service进行的操作,此时去 application ,可以查看到 "Running Service" 的列表如下:
这个,我们去点击上面的按钮(分别点击startservice 1 和 2 各两次),结果如下:
从图中,我们可以看出, onCreate() 方法只在第一次创建服务的时候被调用了。
现在,通过“返回键”来退回至主界面,然后再去 application 的 running service中去查看,可得下面的截图:
从此图中,我们可以看出,虽然Activity被finish掉了,但是由它启动的service仍然在后台运行着。
此时,重新打开该应用,然后直接点击 stop service 1 和 2 按钮各两次(不需再新点击 start service按钮),可以如下截图:
从此图中我们可以看出,只有第一次停止服务的时候,才会调用 onDestroy() 方法。
此时,再去 application 的 running service中去查看,可得下面的截图,发现服务确实已经被停止了:
下面附上部分源码(具体地请参见附件):
// 四个按钮的响应事件 private OnClickListener btnListener = new OnClickListener() { @Override public void onClick(View v) { switch (v.getId()) { case R.id.startSer1: updateLog("Start Service 1 pressed"); // 启动服务(如果想传递数据,也可以将其封装进该intent) startService(intent); break; case R.id.startSer2: updateLog("Start Service 2 pressed"); startService(intent); break; case R.id.stopSer1: updateLog("Stop Service 1 pressed"); // 停止服务 stopService(intent); break; case R.id.stopSer2: updateLog("Stop Service 2 pressed"); stopService(intent); break; default: break; } } };
// service 的实现 public class MyService extends Service { private static final String TAG = "MyService"; @Override public void onCreate() { super.onCreate(); MyServiceActivity.updateLog(TAG + " ----> onCreate()"); } @Override public int onStartCommand(Intent intent, int flags, int startId) { MyServiceActivity.updateLog(TAG + " ----> onStartCommand()"); return START_STICKY; } @Override public IBinder onBind(Intent intent) { MyServiceActivity.updateLog(TAG + " ----> onBind()"); return null; } @Override public void onDestroy() { super.onDestroy(); MyServiceActivity.updateLog(TAG + " ----> onDestroy()"); } }
大小: 18 KB
大小: 38.5 KB
大小: 33.8 KB
大小: 44.9 KB
大小: 24.4 KB
ServiceDemo.zip (49.7 KB)
下载次数: 250
大小: 30.2 KB
大小: 26.2 KB
大小: 18.8 KB
查看图片附件
相关文章推荐
- Android开发:Fragment不同操作的生命周期
- Android开发艺术探索学习笔记(十)
- android中与Adapter相关的控件----Spinner&AutoCompleteTextView
- Android之fragment的两种创建方式
- android开发中模拟系统内存不足 应用释放的情况
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递
- Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解
- Android Lolipop 屏蔽隐式Intent检查引发的错误
- Android sdk配置 常见问题及处理方法——馨新欣心
- android:descendantFocusability用法简析 item焦点问题
- Android线程模型(Painless Threading)
- Android ListView头部随着上下拖动缩放
- Android开发之MVP模式
- Android 之 传感器 应用
- Android 控件设置焦点,防止跳转页面出现焦点不在页面顶部
- 框架模式 MVC 在Android中的使用
- Android开发笔记(四十七)Runnable接口实现多线程
- [资源贴] AChartEngin -Android 图形化报表 插件
- android 安装 apk 遭遇 java.lang.UnsupportedOperationException: Only file:// URIs
- Android Studio中获取SHA1或MD5的方法