【Android基础入门〖4〗】四大组件之Service

1  生命周期图

 

2 第一种 非绑定方式 startService

2.1 自定义 Service

  1. package com.demoservice;  
  2. import android.app.Service;  
  3. import android.content.Intent;  
  4. import android.media.MediaPlayer;  
  5. import android.os.Binder;  
  6. import android.os.IBinder;  
  7. import android.util.Log;  
  8. public class FirstService extends Service {  
  9.     MediaPlayer mplayer;  
  10.     Binder binder=new Binder();  
  11.     @Override  
  12.     public IBinder onBind(Intent intent) {  
  13.         // TODO 自动生成的方法存根  
  14.         return binder;  
  15.     }  
  16.     @Override  
  17.     public void onCreate() {  
  18.         // TODO 自动生成的方法存根  
  19.         super.onCreate();  
  20.         mplayer=MediaPlayer.create(this, R.raw.music12);  
  21.         Log.i("demo""onCreate");  
  22.     }  
  23.     @Override  
  24.     public int onStartCommand(Intent intent, int flags, int startId) {  
  25.         // TODO 自动生成的方法存根  
  26.         Log.i("demo""onStartCommand");  
  27.         mplayer.start();  
  28.         return super.onStartCommand(intent, flags, startId);  
  29.     }  
  30.     @Override  
  31.     public void onDestroy() {  
  32.         // TODO 自动生成的方法存根  
  33.         Log.i("demo""onDestroy");  
  34.         mplayer.stop();  
  35.         super.onDestroy();  
  36.     }  
  37. }  

2.2 注册 Service

  1. <service  
  2.     android:name="com.demoservice.FirstService">  
  3.     <intent-filter >  
  4.         <action android:name="michael.FIRSTSERVICE"/>  
  5.     </intent-filter>  
  6. </service>  

2.3 开启/关闭 Service

  1. package com.demoservice;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7. import android.widget.Button;  
  8. public class MainActivity extends Activity {  
  9.     Button btn_start,btn_stop;  
  10.     @Override  
  11.     protected void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.activity_main);  
  14.         btn_start=(Button)findViewById(R.id.btn_start);  
  15.         btn_stop=(Button)findViewById(R.id.btn_stop);  
  16.           
  17.         final Intent intent=new Intent();  
  18.         intent.setAction("michael.FIRSTSERVICE");  
  19.           
  20.         OnClickListener listener=new OnClickListener() {  
  21.               
  22.             @Override  
  23.             public void onClick(View v) {  
  24.                 // TODO 自动生成的方法存根  
  25.                 if(v == btn_start)  
  26.                 {  
  27.                     startService(intent);  
  28.                 }else if(v==btn_stop)  
  29.                 {  
  30.                     stopService(intent);  
  31.                 }  
  32.             }  
  33.         };      
  34.         btn_start.setOnClickListener(listener);  
  35.         btn_stop.setOnClickListener(listener);  
  36.     }  
  37. }  


3 第二种 绑定方式 bindService

3.1 自定义 Service

  1. package com.SecondService;  
  2. import com.demoservice.R;  
  3. import android.app.Service;  
  4. import android.content.Intent;  
  5. import android.media.MediaPlayer;  
  6. import android.os.Binder;  
  7. import android.os.IBinder;  
  8. import android.util.Log;  
  9. public class SecondService extends Service {  
  10.     int count;  
  11.     boolean quit=false;  
  12.     MediaPlayer mplayer;  
  13.     MyBinder binder=new MyBinder();  
  14.     @Override  
  15.     public IBinder onBind(Intent intent) {  
  16.         // TODO 自动生成的方法存根  
  17.         Log.i("demo""onBind");  
  18.         mplayer.start();  
  19.           
  20.         new Thread()  
  21.         {  
  22.             @Override  
  23.             public void run() {  
  24.                 while(!quit)  
  25.                 {  
  26.                     try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}  
  27.                     count++;  
  28.                     Log.i("demo", String.valueOf(count));  
  29.                 }  
  30.             }  
  31.         }.start();  
  32.         return binder;  
  33.     }  
  34.     @Override  
  35.     public boolean onUnbind(Intent intent) {  
  36.         Log.i("demo""onUnbind");  
  37.         quit=true;  
  38.         return super.onUnbind(intent);  
  39.     }  
  40.     @Override  
  41.     public void onRebind(Intent intent) {  
  42.         Log.i("demo""onRebind");  
  43.         mplayer.start();  
  44.         super.onRebind(intent);  
  45.     }  
  46.     @Override  
  47.     public void onCreate() {  
  48.         super.onCreate();  
  49.         quit=false;  
  50.         mplayer=MediaPlayer.create(this, R.raw.music12);  
  51.         Log.i("demo""onCreate");  
  52.     }  
  53.     @Override  
  54.     public void onDestroy() {  
  55.         Log.i("demo""onDestroy");  
  56.         mplayer.stop();  
  57.         quit=true;  
  58.         super.onDestroy();  
  59.     }  
  60.       
  61.     class MyBinder extends Binder  
  62.     {  
  63.         public SecondService getService()  
  64.         {  
  65.             return SecondService.this;  
  66.         }  
  67.         public int getCount()  
  68.         {  
  69.             return count;  
  70.         }  
  71.     }  
  72. }  

3.2 注册 Service

  1. <service  
  2.     android:name="com.SecondService.SecondService">  
  3.     <intent-filter >  
  4.         <action android:name="michael.SECONDSERVICE"/>  
  5.     </intent-filter>  
  6. </service>  

3.3 绑定/解绑Service

  1. package com.SecondService;  
  2. import com.demoservice.R;  
  3. import android.app.Activity;  
  4. import android.content.ComponentName;  
  5. import android.content.Intent;  
  6. import android.content.ServiceConnection;  
  7. import android.os.Bundle;  
  8. import android.os.IBinder;  
  9. import android.util.Log;  
  10. import android.view.Menu;  
  11. import android.view.View;  
  12. import android.view.View.OnClickListener;  
  13. import android.widget.Button;  
  14. public class MainActivity extends Activity {  
  15.     SecondService mservice;  
  16.     ServiceConnection conn=new ServiceConnection() {  
  17.           
  18.         @Override  
  19.         public void onServiceDisconnected(ComponentName name) {  
  20.             // TODO 自动生成的方法存根  
  21.             Log.i("demo""onServiceDisconnected");  
  22.             mservice=null;  
  23.         }  
  24.           
  25.         @Override  
  26.         public void onServiceConnected(ComponentName name, IBinder service) {  
  27.             // TODO 自动生成的方法存根  
  28.             Log.i("demo""onServiceConnecteds");  
  29.             mservice = ((SecondService.MyBinder)service).getService();  
  30.         }  
  31.     };  
  32.       
  33.     Button btn_start,btn_stop,btn_get;  
  34.     @Override  
  35.     protected void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         setContentView(R.layout.activity_main);  
  38.         btn_start=(Button)findViewById(R.id.btn_start);  
  39.         btn_get=(Button)findViewById(R.id.btn_get);  
  40.         btn_stop=(Button)findViewById(R.id.btn_stop);  
  41.         final Intent intent=new Intent();  
  42.         intent.setAction("michael.SECONDSERVICE");  
  43.           
  44.         OnClickListener listener=new OnClickListener() {  
  45.               
  46.             @Override  
  47.             public void onClick(View v) {  
  48.                 // TODO 自动生成的方法存根  
  49.                 if(v == btn_start)  
  50.                 {  
  51.                     bindService(intent, conn, BIND_AUTO_CREATE);  
  52.                 }else if(v==btn_stop)  
  53.                 {  
  54.                     unbindService(conn);  
  55.                 }else if(v==btn_get)  
  56.                 {  
  57.                     btn_get.setText(String.valueOf(mservice.binder.getCount()));  
  58.                 }  
  59.             }  
  60.         };      
  61.         btn_start.setOnClickListener(listener);  
  62.         btn_stop.setOnClickListener(listener);  
  63.         btn_get.setOnClickListener(listener);  
  64.     }  
  65. }  

转载请注明出处!

原:http://blog.csdn.net/mkrcpp/article/details/11993007


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值