关于Android中的Service的使用,首先要明白Service的生命周期,开发Service的步骤与Activity的步骤很像,开发Service组件需要先开发一个Service的子类,然后在AndroidManifest.xml中配置该Service。

首先,先来说一下Service的生命周期:

正如Activity一样,Service也有自己的一套生命周期函数,在Android中,运行Service有两种方法:

(1) 通过Context的startService()方法:通过该方法启动Service,那么即使访问者退出了,Service仍然在运行着,因为访问者与Service之间没有关联;

(2) 通过Context的bindService()方法:通过该方法启动Service,访问者与Service绑定在一起,访问者一旦退出了,Service也就终止。

  service整体的生命时间是从onCreate()被调用开始,到onDestroy()方法返回为止。

  和activity一样,service在onCreate()中进行它的初始化工作,在onDestroy()中释放残留的资源。

  那么如何来使用第二种运行方式来运行一个Service呢?

  每一个被创建好的Service都潜在的允许绑定,所以一个被开启的Service仍然可能被绑定的,

  调用被绑定的service是当其他组件(一个客户)调用bindService()来创建的,客户可以通过一个IBinder()接口和service进行通信。

  客户可以通过unbindService()方法来关闭这种连接,一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。

  

  通过下边的这张图洗完可以更好的帮助理解一下Service的周期。

  

  下边的类定义了一个Service组件,虽然这个Service什么事情也没干,但实际是那个它是Service组件的框架,如果希望Service做某些事情,那么只要在onCreate()或onStartCommand()方法中定义响应的恶业务代码即可。

public class MyFirstService extends Service {    private String  Tag = "MyFirstService";        @Override    public IBinder onBind(Intent arg0) {        // TODO Auto-generated method stub        return null;    }    @Override    public void onCreate() {        // TODO Auto-generated method stub         Log.v(Tag, "Service is Created");          super.onCreate();    }    @Override    public void onDestroy() {        // TODO Auto-generated method stub          Log.v(Tag, "Service is Destroy");          super.onDestroy();    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // TODO Auto-generated method stub         Log.v(Tag, "Service is Started");          return super.onStartCommand(intent, flags, startId);    }    @Override    public boolean onUnbind(Intent intent) {        // TODO Auto-generated method stub        Log.v(Tag, "start onUnbind~~~");          return super.onUnbind(intent);    }       }

定义了上边的Service之后,需要在AndroidManifest.xml中被指该Service:

  <service android:name="com.example.service.MyFirstService" />

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android(安卓)Canvas绘图描述Android(安卓)Canvas 方法总结
  5. Android(安卓)ListView滑动后背景变黑问题解决方法
  6. Android周学习Step By Step(6)--Android的数据库SQLite
  7. android导入xxx.aar依赖方法
  8. Android与JavaScript方法相互调用!
  9. Android(安卓)触控事件解析 - Mastering The Android(安卓)Touch

随机推荐

  1. 一些Apache、Php和Mysql的优化配置选项
  2. php的最快排序,放弃老师教的消耗大量资源
  3. Nginx 502报错(django+nginx,而非php-fmp
  4. 什么是客户端准备语句?
  5. 在PHP和MySQL中同时插入来自多个表单的多
  6. 关于php的命名空间
  7. 在解释语言上使用非常大的整数时,会产生意
  8. php 封装原生数据导出的方法
  9. php老提示 Undefined variable: 的解决办
  10. mysqli不执行Select语句