2015年3月16日 星期一

[Android] 關於服務 Service - 如何建立

平常我們都是在Activity裡建構我們的程式,
包括和使用者的互動以及想要完成的事,
那麼,為何還需要所謂的服務(Service)呢?
想像一下,你可能需要在背景播放音樂,
或者執行TCP/UDP等網路活動,
這些你當然也可以new thread背後去跑,
但...假如我們希望在Activity結束後,
這些服務仍然存在呢?
此時你就需要Service的機制...

建立一個Service只要幾個步驟:
首先,先create service class..
public class myService  extends Service {
 private ServiceThread mServiceThread; 
 @Override
 public IBinder onBind(Intent intent) {
  // TODO Auto-generated method stub
  return null;
 }
 
 @Override
 public void onCreate() {
 // TODO Auto-generated method stub
 super.onCreate();
 }
  
 @Override
 public int onStartCommand(Intent intent, int flags, int startId) {
  mServiceThread = new ServiceThread();
  mServiceThread.start();
     return  START_STICKY ; 
 }     
  

 @Override
 public void onDestroy() {
  Log.d(TAG,"onDestroy()");
  if (mServiceThread != null)
   mServiceThread.interrupt();
 }
  
 private class ServiceThread extends Thread {
  @Override
  public void run() {
   super.run();
   //your action here
  }
 } 
}
這裡new ServiceThread()是因為一般Service會需要一直執行某些動作,
如果你只需要簡單的處理一些事情,而且只要一次,
那把你要做的事寫在在onStartCommand()即可... 
再來,Service必須在AndroidManifest.xml裡註冊才行
<service android:name="myPackageName.myService"> </service >
如此就已建立Service了...
那如何調用呢?
假設你的Activity裡有一個按鈕,
按下按鈕後我們希望啓動剛剛的Service
public void onClick(View v) {
Intent i = new Intent(this, myService.class);  
startService(i);
}
反過來,如果你想要停止這個Service呢?
public void onClick(View v) {
Intent i = new Intent(this, myService.class);  
stopService(i);
}
如果要確定Service有沒有建立成功, 可以到應用程式管理員的"執行中"畫面找一下,看看有沒有剛剛建立的Service名字...

沒有留言:

張貼留言