Android之Service
今天记录一下老夫对Service的理解,先看一下Service的概念,即Service是什么不是什么,那Service是什么呢? Service是Android的四大组件之一,可以长时间在后台运行; Service不提供界面交互,即Service不像activity一样,有一个界面做展示; 即便用户跳转至另一个应用后,Service仍旧在后台运行; 任意应用组件都可以绑定一个服务,甚至可以用来完成进程间通讯的任务; 可以使用Service更新ContentProvider,发送Intent以及启动系统的通知等等; 那Service不是什么呢? Service不是一个单独的进程; Service不是一个线程!!!(即Service运行于主线程中,根据Service的概念,这个应该有很多人怀疑,持怀疑态度的可以打一下线程号,比较简单,老夫就不多做赘述了) 看完Service是什么和不是什么之后,我们来看看什么时候需要用Service呢?Service一般是在后台做一些费力费时的任务(老夫窃以为和西游记中的沙僧差不多,默默无闻,任劳任怨),例如:下载文件、播放音乐、文件I/O等。 既然在这些时候需要用Service,那么我们怎么启动一个Service呢?启动一个Service用两种方式,分别是startService()和bindService(),那么他们之间又有什么区别和应用于什么场合呢? 首先来看startService(),一旦某个组件start一个Service后,Service开始独立运行,不在与原来的组件产生任何关系,如果想要停止Service,必须手动停止,所以其适用于开启下载、播放音乐之类的; 下面我们再看看bindService(),某个组件bind一个Service后,Service为组件提供一个接口,近似于客户端,会进行交互,当所有bind的组件都结束后,Service会自动停止,有很多系统服务都被系统封装了,例如传感器、定位等。 看了一大堆理论之后,我们来看看怎么启动一个service: 一、startService(),代码如下: MainActivity用来启动一个Service, package cn.bridgeli.demo; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button start = null; private Button stop = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); start = (Button) findViewById(R.id.start); start.setText("Start Service"); start.setOnClickListener(this); stop = (Button) findViewById(R.id.stop); stop.setText("Stop Service"); stop.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.start: Intent startService = new Intent(); startService.setClass(MainActivity.this, MainService.class); startService(startService); break; case R.id.stop: Intent stopService = new Intent(); stopService.setClass(MainActivity.this, MainService.class); stopService(stopService); break; default: break; } } } 对应的布局文件activity_main: ...