它须要通过某一个Activity或者其它Context对象来调用。
须要注意的是,Service不是一个单独的进程或为了防止应用出现无反应错误单独的线程,它像其它应用对象一样执行在其托管进程的主线程中。
当然,假设我们希望自己的Service能够在后台执行MP3或者网络下载,我们能够创建一个线程来实现。
调用Context.startService()触发的Service生命周期方法:
调用Context.startService()触发的Service生命周期方法:
也就是说当调用bindService()的组件销毁了,那么它绑定的Service也跟着被结束。
\src\service\FirstService.java
public class FirstService extends Service { /*a.必须实现的方法,返回一个IBinder对象给client以便实现通信 * 因为我们调用startService方法启动一个Servie,无需与client(组件)绑定,因此,返回为null. */ @Override public IBinder onBind(Intent arg0) { return null; } /*b.Service被创建时回调该方法*/ @Override public void onCreate() { super.onCreate(); System.out.println("Service is Created"); } /*c.Service被启动时回调该方法*/ @Override public int onStartCommand(Intent intent,int flags,int startId) { Sytem.out.println("Service is Started"); return START_STICKY; } /*d.Service被关闭之前回调*/ @Override public void onDestroy() { super.onDestroy(); System.out.println("Service is Destroyed"); } }
与配置Activity相似的是,配置Service时也可为<service../>元素配置<intent-filter../>子元素。用于说明该Service可被哪些Intent启动。
<!--配置一个Service组件--> <service android:name=".FirstService"> <intent-filter> <!--为该service组件的intent-filter配置action--> <action android:name="com.example.service.FIRST_SERVICE"/> </intent-filter> </service>
所以,开发Service类似于开发Activity,我们仅仅需定义一个继承Service的子类而且在AndroidManifest.xml文件里配置该Service后,就能在程序中执行该Serviec。
怎样启动一个Service呢?我们能够在本应用的Activity子类中通过Context.startService()方法或Context.bindService()方法启动一个service,也能够在还有一个应用的Activity子类中通过Context.startService()方法或Context.bindService()方法启动这个service.
public class StartServiceTest extends Activity { Button start,stop; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //获取程序界面button中的start、stop两个button start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); //创建启动Service的Intent final Intent intent = new Intent(); //为Intent设置Action属性 intent.setAction("com.example.service.FIRST_SERVICE"); start.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { //启动指定Service startService(intent); } }); stop.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { //关闭指定Service stopService(intent); } }); } }