2015年10月18日 星期日

Service-1-Start service

服務「啟動」表示應用程式元件 (例如 Activity) 透過呼叫 startService() 來啟動服務。一旦啟動,服務可以無限次數地在背景中執行,就算啟動服務的元件已終結也不會影響。 通常,已啟動的服務會執行單一操作且不會將結果傳回呼叫端。例如,服務可能會透過網路下載或上傳檔案。

服務會在其託管程序的主執行緒中執行 —
 服務不會建立自己的執行緒且不會在另外的程序中執行 (除非您另行指定)。 如果您的服務即將從事任何 CPU 密集的作業或封鎖操作 (如播放 MP3 或連線網路),您應該在服務中建立新的執行緒來執行這些工作。 透過使用另外的執行緒,您會降低應用程式不回應 (ANR) 錯誤的風險,且應用程式的主執行緒仍可以專務於使用者與您的 Activity 互動。

1. Create a Service



public class EchoService extends Service {
    public EchoService() {
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }


    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

2.At activity A start A service


Intent intent = new Intent(this,EchoService.class);
  startService(intent);

when you call startService(intent);, will execute onCreate and onStartCommand method. However, will you call again startService, only onStartCommand  will execute again.

when onStartCommand  finish ,the Service object still here

3.Stop the service

In the service :

stopSelf() 

outside the Service:

 stopService()

after call these method, OnDestroy() will call

當不再使用服務且正在終結服務時,系統會呼叫此方法。您的服務應該實作此方法來清除任何如執行緒、註冊的接聽器,接收器等資源。 這會是服務接收到的最後呼叫。