Java 类com.google.common.util.concurrent.AbstractExecutionThreadService 实例源码

项目:maven-native-oat    文件:AdbShellProcess.java   
public AdbShellProcess(final AndroidDevice device,
                       final AndroidProcessBuilder builder) {
    this.device = device;
    this.builder = builder;

    this.workingDir = device.getTempDir() + "/" + UUID.randomUUID();
    this.device.deleteOnClose(this.workingDir);

    this.stdErr = builder.redirectErrorStream() ?
                            AdbShellStream.getNull() :
                            AdbShellStream.get(builder.redirectError(), System.err);

    /* Our exit code future */
    this.exitFuture = SettableFuture.create();

    /* Set up a service that just maps to our own functions */
    this.service = new AbstractExecutionThreadService() {
        @Override protected void startUp() throws IOException { AdbShellProcess.this.startUp(); }
        @Override protected void run() throws IOException, InterruptedException { AdbShellProcess.this.run(); }
        @Override protected void shutDown() { AdbShellProcess.this.shutDown(); }
    };
    service.addListener(new Service.Listener() {
        @Override
        public void failed(final Service.State from, final Throwable failure) {
            AdbShellProcess.this.onFail(failure);
        }
    }, MoreExecutors.sameThreadExecutor());
    service.startAsync();
}