ServiceTest


main.xml
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
    <Button  
        android:id="@+id/bt_startService"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="  Service"  
    />  
    <Button  
        android:id="@+id/bt_stopService"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="  Service"  
    />  
    <Button  
        android:id="@+id/bt_bindService"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="  Service"  
    />  
    <Button  
        android:id="@+id/bt_unbindService"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="  Service"  
    />  
    <Button  
        android:id="@+id/bt_closeApplication"  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="    "  
    />  
</LinearLayout>  
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, ServiceTest!</string>
    <string name="app_name">ServiceTest01</string>
    <string name="Service_started">Service_started</string>    
</resources>

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.hyz"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".ServiceTest"
                  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=".MyService" android:exported="true">
		<intent-filter>
			<action android:name="com.hyz.PlayService.PLAY_MUSIC" />
			<category android:name="android.intent.category.default" />
		</intent-filter>
	</service> 
    </application>
</manifest> 
package com.hyz;


import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;  
import android.content.Intent;  
import android.media.MediaPlayer;
import android.os.Binder;  
import android.os.IBinder;  
import android.util.Log;  
  /*
   *   service     ,  startService(intent); 
   *     bindService(intent, serviceConnection, BIND_AUTO_CREATE);
   *       :     (  menu-->  -->    —>       )
   *          。             ,
   *                   Activity    。
   */
public class MyService extends Service {  
	private MediaPlayer player;
    private final String service = "Service"; 
    public  static String serviceState = "";//       ,               “” 
    private NotificationManager _nm;    
    private MyBinder mBinder = new MyBinder();  //  Activity        
      
    @Override     
    public IBinder onBind(Intent arg0) {    //  Service,        ;     ,      。   
        // TODO Auto-generated method stub  //    Service  onUnbind(),   
        Log.e(service, "MyService-->onBind()");  
        serviceState = "onBind";
        return mBinder;  
    }  
    @Override  
    public boolean onUnbind(Intent intent) {    //  Service,   onDestroy()   
        // TODO Auto-generated method stub      //      ,     Service,    ,   
    	 Log.e(service, "MyService-->onUnbind()");         //     。   
    	 serviceState = "onUnbind";
        return super.onUnbind(intent);  
    } 
    @Override  
    public void onCreate() {                //  Service   
        // TODO Auto-generated method stub   
        super.onCreate();  
        Log.e(service, "MyService-->onCreate()");
        serviceState = "onCreate";
		_nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
		showNotification();
    }  
  
    @Override  
    public void onDestroy() 
    {  //  Service   
        super.onDestroy();
        Log.e(service, "MyService-->onDestroy()"); 
        
        if(serviceState.equals("onStart"))
        player.stop();
        serviceState = "onDestroy";
        
    }  
  
    @Override  
    public void onStart(Intent intent, int startId) 
    {
    	//  Service,         
        super.onStart(intent, startId);  
        Log.e(service, "MyService-->onStart()");
        serviceState = "onStart";
        player = MediaPlayer.create(this, R.raw.gequ);
        player.start();
         }           
     /** 
     *   Activity     ,  ServiceConnection.onServiceConnected        * 
     */  
    public class MyBinder extends Binder
    {  
    	
        MyService getService()  
        {  
        	Log.e(service, "MyService-->MyBinder-->getService()");  
            return MyService.this;  
        }  
    }  
	private void showNotification()
	{
		Notification notification = new Notification(R.drawable.icon,"service started",System.currentTimeMillis());		
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this,ServiceTest.class), 0);		
		notification.setLatestEventInfo(this, "test service","service started"	, contentIntent);		
		_nm.notify(R.string.Service_started,notification);
		
	}
}  

 

package com.hyz;

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.util.Log;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.Toast;  
  
public class ServiceTest extends Activity{  
    private Button bt_startServiect;  
    private Button bt_stopServiect;  
    private Button bt_bindServiect;  
    private Button bt_unbindServiect;  
    private Button bt_closeApp;  
         
     //  Service       , Activity Service         
    private ServiceConnection serviceConnection = new ServiceConnection() 
    {    
        @Override  
        public void onServiceConnected(ComponentName name, IBinder service) 
        {  
            Toast.makeText(ServiceTest.this, "The Program is Binding!", Toast.LENGTH_SHORT).show();  
            Log.e("Service", "ServiceTest-->onServiceConnected(serviceConnection)");  
        }    
        @Override  
        public void onServiceDisconnected(ComponentName name) 
        {  
            Log.e("Service", "ServiceTest-->onServiceDisconnected(serviceConnection)");  
        }  
    };  
    @Override  
    public void onCreate(Bundle savedInstanceState) 
    {           
        super.onCreate(savedInstanceState);  
        Log.e("Service", "ServiceTest-->onCreate()");  
        setContentView(R.layout.main);  
        InitView();           
    }    
    @Override  
    protected void onDestroy() 
    {  
        super.onDestroy();  
        Log.e("Service", "ServiceTest-->onDestroy()");  
        Log.e("Activity", "onDestroy");  
    }
    private void InitView() {  
    	  Log.e("Service", "ServiceTest-->InitView()");
        bt_startServiect = (Button) findViewById(R.id.bt_startService);  
        bt_stopServiect = (Button) findViewById(R.id.bt_stopService);  
        bt_bindServiect = (Button) findViewById(R.id.bt_bindService);  
        bt_unbindServiect = (Button) findViewById(R.id.bt_unbindService);  
        bt_closeApp = (Button) findViewById(R.id.bt_closeApplication);  
          
        bt_startServiect.setOnClickListener(new ClickEvent());  
        bt_stopServiect.setOnClickListener(new ClickEvent());  
        bt_bindServiect.setOnClickListener(new ClickEvent());  
        bt_unbindServiect.setOnClickListener(new ClickEvent());  
        bt_closeApp.setOnClickListener(new ClickEvent());  
    }
    private class ClickEvent implements OnClickListener
    {    
        @Override  
        public void onClick(View v) 
        {    
            Intent intent = new Intent(ServiceTest.this, MyService.class);                
            switch(v.getId()) 
            {                
            case R.id.bt_startService:  //  Service:OnCreate()->onStart()   
            	Log.e("Service", "ServiceTest-->ClickEvent-->onClick(bt_startService)");
            	startService(new Intent("com.hyz.PlayService.PLAY_MUSIC"));  
            	Log.e("Service", MyService.serviceState);
                break;                    
            case R.id.bt_stopService:   //  Service:onDestroy()  
            	Log.e("Service", "ServiceTest-->ClickEvent-->onClick(bt_stopService)");
                ServiceTest.this.stopService(intent);  
                Log.e("Service", MyService.serviceState);
                break;                    
            case R.id.bt_bindService:   //  Service:OnCreate()->onBind()
            	Log.e("Service", "ServiceTest-->ClickEvent-->onClick(bt_bindService)");
                ServiceTest.this.bindService(intent, serviceConnection, BIND_AUTO_CREATE); 
                Log.e("Service", MyService.serviceState);
                break;                   
            case R.id.bt_unbindService: //  Service:onUnbind()->onDestroy()
            	Log.e("Service", "ServiceTest-->ClickEvent-->onClick(bt_unbindService)");
                if("onBind".equals(MyService.serviceState)) 
                {   
                	//     ,    ,       
                    ServiceTest.this.unbindService(serviceConnection);  
                }  
                Log.e("Service", MyService.serviceState);
                break;                    
            case R.id.bt_closeApplication://       
            	Log.e("Service", "ServiceTest-->ClickEvent-->onClick(bt_closeApplication)");
                ServiceTest.this.finish();  
                break;  
            default:  
                break;  
            }  
        }           
    }  
}  
 
1、サービスの :startService(intent);
OnCreate()-->onStart()
2、サービスを じる:stopService(intent); 
OnDestroy()
3、バインドサービス:bindService(intent,serviceConnection,BIND_AUTO_CREATE);
OnCreate()-->OnBind()-->onServiceConnected(serviceConnection)
4、サービスを める:unbindService(serviceConnection);
onUnbind()-->onDestroy()
AndroidではActivityはフロントプロセス、Serviceはバックグラウンドプロセスです.Activityにはインタフェースがあり、Serviceにはインタフェースがありません.サービスはいつ いますか? も な は、 を するときに、インタフェースの によって の を したくないということです.では、サービスを えば、この をうまく できます.
 
サービスのライフサイクルは で、 な は の りです.
に2つの があり、 によって けられます.
1、 をバインドしない:
          onCreate() -->  onStart  -->  onDestroy();
2、バインド :
          onCreate() -->  onBind  -->   onUnbind  -->  onDestroy();
もちろん、 の2つの を して することができます. えば、onCreate()-->onStart-->sonBind-->onUnbind-->sonDestroy()です.いくつか したいことがあります.
1、1つのサービスは できますが、バインドする は1 のみバインドできます.
2、OnBindバインディングプログラムを び すと、サービスが されるのは2つだけです.1つ は、それをバインディングしたActivityオブジェクトが することです.2つ はOnUnbindメソッドを び して りを めることです.
3、OnStart を び すサービスについては、 び すActivityが するにつれて しません. に したり、Kiillメソッドを び すのを っているだけです.これもインタフェースが しても が され けることを する です.サービスはActivityで び されますが、Activityは するだけで、サービスの の はActivityのクローズの を けません.
4 OnBindバインディングプログラムの のみ、OnUnbindメソッドを び すことができます.そうしないと、エラーが します.
 
サービスを するには、startService(intent)の2つの があります.もう1つのbindService(intent,serviceConnection,BIND_AUTO_CREATE);この2つの い:1つ は、( menu--> -->アプリケーション-> のサービス)であなたのサービスを ることができます.2つ は、2つ のバインドサービスがバインドされたActivityと するため、 の では えません.