歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android You之Service理解

Android You之Service理解

Service中文意思為服務,在android幫助文檔中的解釋為“A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use. ”,中文意思大概為:一個服務是應用組成的一部分,它呈現一個程序的意願或者運行一個不需要向用戶交互或者不被其他應用程序所使用的一個長時間運行的操作。

下面了解一下service不是什麼:

1.A Service is not a separate process. The Service object itself does not imply it is running in its own process; unless otherwise specified, it runs in the same process as the application it is part of.

service不是一個單獨的進程,service對象本身不能調用使自己運行在自己獨有的進程總,它必須被別的所調用,它運行在應用的進程中,並且作為其中的一部分。

2.A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not Responding errors).

service不是一個線程,它不是一個方法讓自己工作於主線程之外(避免應用程序出現無法響應的錯誤)

每個Service的調用必須在應用程序中的manifest文件中注冊,調用可以使用Context.startService()或者Context.bindService()這兩個方法。

兩種調用方法的區別簡單地總結可以是:

通過startService()方法調用service,service啟動會經歷onCreate->onStart這兩個階段,service停止的時候直接進入銷毀onDestory,如果調用者直接退出(非調用stopService)後,service還將繼續運行,知道調用者再次被啟動,調用stopService,服務才結束。

通過bindService()方法調用service,service啟動只經歷onCreate,這時候調用者就和service綁定在一起了,如果調用者退出,服務自動調用unBind->onDestory,結束服務。

關於如果多個方法交叉調用的情況,符合這樣的結果,如果在一個命令所做的部分已,則完成剩下的結果,但是如果只要調用了onBind,就不能使用stopService結束服務了。這裡留給大家依次列舉可能的情況。

主activity程序源碼:

  1. package ps.androidyue.servicetest;  
  2. //import the necessary packages   
  3. import android.app.Activity;  
  4. import android.content.ComponentName;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.ServiceConnection;  
  8. import android.os.Bundle;  
  9. import android.os.IBinder;  
  10. import android.view.View;  
  11. import android.widget.Button;  
  12.   
  13.   
  14. public class ServiceTestActivity extends Activity {  
  15.     //declare the buttons   
  16.     private Button btnStartService,btnStopService,btnBindService,btnUnbindService;  
  17.     /** Called when the activity is first created. */  
  18.     @Override  
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         //load the layout configuration from xml file   
  22.         setContentView(R.layout.main);  
  23.         //initialize necessary views   
  24.         initializeViews();  
  25.     }  
  26.       
  27.     /* 
  28.      * initialize necessary views 
  29.      */  
  30.     private void initializeViews(){  
  31.         initializeButtons();  
  32.     }  
  33.       
  34.     /* 
  35.      * initialize necessary buttons 
  36.      */  
  37.     private void initializeButtons(){  
  38.         //the button that will start a service   
  39.         this.btnStartService=(Button)findViewById(R.id.btnStartService);  
  40.         this.btnStartService.setOnClickListener(new BtnStartServiceOnClickListener());  
  41.         //the button that will stop a service   
  42.         this.btnStopService=(Button)findViewById(R.id.btnStopService);  
  43.         this.btnStopService.setOnClickListener(new BtnStopServiceOnClickListener());  
  44.         //the button that will bind a service   
  45.         this.btnBindService=(Button)findViewById(R.id.btnBindService);  
  46.         this.btnBindService.setOnClickListener(new BtnBindServiceOnClickListener());  
  47.         //the button that will unbind service   
  48.         this.btnUnbindService=(Button)findViewById(R.id.btnUnbindService);  
  49.         this.btnUnbindService.setOnClickListener(new BtnUnbindServiceOnClickListener());  
  50.     }  
  51.       
  52.     /* 
  53.      * onClickListener for btnStartService.aimed to start a service 
  54.      */  
  55.     class BtnStartServiceOnClickListener implements View.OnClickListener{  
  56.         @Override  
  57.         public void onClick(View view){  
  58.             Intent intent=new Intent(ServiceTestActivity.this,ServiceForTest.class);  
  59.             startService(intent);  
  60.         }  
  61.     }  
  62.   
  63.   
  64.       
  65.     /* 
  66.      * onClickListener for btnStopService .aimed to stop a service 
  67.      */  
  68.     class BtnStopServiceOnClickListener implements View.OnClickListener{  
  69.         @Override  
  70.         public void onClick(View view){  
  71.             Intent intent=new Intent(ServiceTestActivity.this,ServiceForTest.class);  
  72.             stopService(intent);  
  73.         }  
  74.     }  
  75.       
  76.     /* 
  77.      * onClickListener for btnBindService .aimed to bind a service 
  78.      */  
  79.     class BtnBindServiceOnClickListener implements View.OnClickListener{  
  80.         @Override  
  81.         public void onClick(View view){  
  82.             Intent intent=new Intent(ServiceTestActivity.this,ServiceForTest.class);  
  83.             bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);  
  84.         }  
  85.     }  
  86.       
  87.     /* 
  88.      * onClickListener for btnUnbindService .aimed to unbind a service 
  89.      */  
  90.     class BtnUnbindServiceOnClickListener implements View.OnClickListener{  
  91.         @Override  
  92.         public void onClick(View view){  
  93.             unbindService(serviceConnection);  
  94.         }  
  95.     }  
  96.       
  97.     /* 
  98.      * serviceConnection for bindService(as one of parameters) 
  99.      */  
  100.     private ServiceConnection serviceConnection=new ServiceConnection(){  
  101.   
  102.   
  103.         @Override  
  104.         public void onServiceConnected(ComponentName name, IBinder service) {  
  105.             // TODO Auto-generated method stub   
  106.               
  107.         }  
  108.   
  109.   
  110.         @Override  
  111.         public void onServiceDisconnected(ComponentName name) {  
  112.             // TODO Auto-generated method stub   
  113.               
  114.         }  
  115.           
  116.     };  
  117. }  
Copyright © Linux教程網 All Rights Reserved