服務開啟方式的知識點見博文:http://blog.csdn.net/zengmingen/article/details/49425161
步驟:
1、新建Android項目名“51服務的開啟方式”
2、新建一個類 MyService,繼承?Service
3、在清單文件里配置第二步建的service
4、在Myservice類中覆寫 onBind,onUnbind,onCreate,onStartCommand,onDestroy,并在這些方法里寫上簡單的syso
5、編寫activity_main.xml布局文件,簡單的放置4個按鈕,按鈕設置onclick方法
6、編寫按鈕方法
API解釋:
bindService(Intent service,ServiceConnection conn, int flags)
作用:綁定服務。將參數service里的服務,通過服務連接ServiceConnection?以參數flags的方式綁定服務
service:設置了要啟動的服務,本地或遠程服務
conn:該類有兩個回調方法
1、public void onServiceConnected(ComponentName name, IBinder service)?
該方法在MyService類的onBind()方法返回一個IBinder 的實例的時候被調用。如果返回的null,則不被調用。
2、public void onServiceDisconnected(ComponentName name)
該方法在連接正常關閉的情況下是不會被調用的, 該方法只在Service 被破壞了或者被殺死的時候調用。例如, 系統資源不足, 要關閉一些Services, 剛好連接綁定的 Service 是被關閉者之一,??這個時候onServiceDisconnected() 就會被調用。
flags:一般選擇使用?BIND_AUTO_CREATE,它是Context的常量,自動根據服務是否存在創建服務
代碼:
MyService.java
package com.example.serviceway;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;public class MyService extends Service {@Overridepublic IBinder onBind(Intent intent) {System.out.println("MyService:onBind()");return null;}@Overridepublic boolean onUnbind(Intent intent) {System.out.println("MyService:onUnbind()");return super.onUnbind(intent);}@Overridepublic void onCreate() {System.out.println("MyService:onCreate()");super.onCreate();}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {System.out.println("MyService:onStartCommand()");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {System.out.println("MyService:onDestroy()");super.onDestroy();}}
MainActivity.java
package com.example.serviceway;import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.view.View;public class MainActivity extends Activity {private Intent intent;private ServiceConnection conn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);intent=new Intent();intent.setClass(this, MyService.class);conn=new MyServiceConnection();}public void startService(View v){startService(intent);}public void stopService(View v){stopService(intent);}public void bindService(View v){//BIND_AUTO_CREATE 是上下文里的常量,如果服務不存在,則自動創建bindService(intent, conn, BIND_AUTO_CREATE);}public void unBindService(View v){unbindService(conn);}class MyServiceConnection implements ServiceConnection{@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {//服務連接成功時,該方法調用System.out.println("MyServiceConnection:服務連接了!");}@Overridepublic void onServiceDisconnected(ComponentName name) {//服務失去連接時,該方法調用System.out.println("MyServiceConnection:服務連接斷開了!");}}}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.serviceway"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name="com.example.serviceway.MainActivity"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.example.serviceway.MyService"></service></application></manifest>
運行結果:
開啟服務:
10-26 08:38:26.386: I/System.out(2072): MyService:onCreate()
10-26 08:38:26.386: I/System.out(2072): MyService:onStartCommand()
停止服務:
10-26 08:39:03.076: I/System.out(2072): MyService:onDestroy()
綁定服務:
10-26 08:39:21.436: I/System.out(2072): MyService:onCreate()
10-26 08:39:21.436: I/System.out(2072): MyService:onBind()
解綁服務:
10-26 08:39:48.807: I/System.out(2072): MyService:onUnbind()
10-26 08:39:48.807: I/System.out(2072): MyService:onDestroy()
綁定服務---->返回鍵退出activity
10-26 08:40:34.818: I/System.out(2072): MyService:onCreate()
10-26 08:40:34.818: I/System.out(2072): MyService:onBind()
10-26 08:40:36.578: I/System.out(2072): MyService:onUnbind()
10-26 08:40:36.578: I/System.out(2072): MyService:onDestroy()
activity銷毀,服務銷毀
綁定服務---->home鍵
10-26 08:41:16.698: I/System.out(2072): MyService:onCreate()
10-26 08:41:16.698: I/System.out(2072): MyService:onBind()
activity還在,服務沒銷毀
開啟服務----->返回鍵退出activity
10-26 08:42:43.020: I/System.out(2072): MyService:onCreate()
10-26 08:42:43.020: I/System.out(2072): MyService:onStartCommand()
activity銷毀,服務不銷毀
--------------------------------------
開啟服務---->綁定服務---->停止服務
10-26 08:44:05.991: I/System.out(2072): MyService:onCreate()
10-26 08:44:06.001: I/System.out(2072): MyService:onStartCommand()
10-26 08:44:07.402: I/System.out(2072): MyService:onBind()
停止服務按鈕使勁點,服務也沒有停止銷毀,why?
因為綁定服務后,停止服務是無效的,需要使用解綁方法,解綁的時候同時銷毀服務
開啟服務---->綁定服務---->---->停止服務----->解綁服務
10-26 08:55:52.942: I/System.out(2545): MyService:onCreate()
10-26 08:55:52.942: I/System.out(2545): MyService:onStartCommand()
10-26 08:55:53.871: I/System.out(2545): MyService:onBind()
10-26 08:55:56.691: I/System.out(2545): MyService:onUnbind()
10-26 08:55:56.691: I/System.out(2545): MyService:onDestroy()
代碼下載,0積分下載
http://download.csdn.net/detail/zengmingen/9214327