?
一、Service概念
?????? 1.Service是一个应用程序组件
?????? 2.Service没有图像化界面
?????? 3.Service通常用来处理一些好事比较长的操作
?????? 4.可以使用Service更新ContentProvider,发送Intent以及启动系统的通知等。
Service是Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没有结束,它仍然在后台运行。
?
二、Service不是什么
?????? Service不是一个单独的进程,Service不是一个线程。和应用程序是在同一个进程中。
?
三、Service生命周期
Android Service的生命周期并不像Android中Activity那么复杂,因为它只继承了onCreate(),onStart(),onDestroy()三个方法,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
?
四、启动和停止Service的方法
例子程序:
?
TestService.java
?
package com.android.service;import android.app.Service;import android.content.Intent;import android.os.IBinder;public class TestService extends Service { @Override public IBinder onBind(Intent arg0) { System.out.println("TestService --> onBind"); return null; } @Override public void onCreate() { System.out.println("TestService --> onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { System.out.println("TestService --> onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { System.out.println("TestService --> onDestroy"); super.onDestroy(); } @Override public boolean onUnbind(Intent intent) { System.out.println("TestService --> onUnbind"); return super.onUnbind(intent); }}
?ServiceActivity.java
?
package com.android.activity;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.content.ServiceConnection; import com.android.service.TestService;public class ServiceActivity extends Activity { private Button startService = null; private Button stopService = null; private Button bindService = null; private Button unbindService = null; private MyServiceConnection myServiceConnection = new MyServiceConnection();; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); startService = (Button)findViewById(R.id.startService); stopService = (Button)findViewById(R.id.stopService); bindService = (Button)findViewById(R.id.bindService); unbindService = (Button)findViewById(R.id.unbindService); startService.setOnClickListener(new StartServiceListener()); stopService.setOnClickListener(new StopServiceListener()); bindService.setOnClickListener(new BindServiceListener()); unbindService.setOnClickListener(new UnbindServiceListener()); } class StartServiceListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setClass(ServiceActivity.this, TestService.class); startService(intent); } } class StopServiceListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setClass(ServiceActivity.this, TestService.class); stopService(intent); } } class BindServiceListener implements OnClickListener{ public void onClick(View v) { Intent intent = new Intent(); intent.setClass(ServiceActivity.this, TestService.class); bindService(intent, myServiceConnection, BIND_AUTO_CREATE); } } class UnbindServiceListener implements OnClickListener{ public void onClick(View v) { unbindService(myServiceConnection); } } //这里需要用到ServiceConnection在Context.bindService和 //context.unBindService()里用到 class MyServiceConnection implements ServiceConnection{ public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("ServiceActivity --> onServiceConnected"); } public void onServiceDisconnected(ComponentName name) { System.out.println("ServiceActivity --> onServiceDisconnected"); } }}
?AndroidManifest.java
?
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.activity" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="10" /><application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ServiceActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.android.service.TestService" android:exported="true"></service> </application></manifest>
?
运行结果:
点击启动服务按钮:
此时可以在Setting/Application/Running Services里面查看我们的服务。
?
?依次点击绑定服务、取消绑定服务、停止服务按钮: