天天看點

java執行指令行_[Java]執行指令行語句

[java]代碼庫package net.qiujuer.libraries.genius.command;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.IBinder;

import net.qiujuer.libraries.genius.journal.LogUtil;

import net.qiujuer.libraries.genius.utils.GlobalValue;

import java.util.concurrent.locks.Condition;

import java.util.concurrent.locks.Lock;

import java.util.concurrent.locks.ReentrantLock;

public class CommandModel {

private static final String TAG = CommandModel.class.getName();

//調用服務接口

private static ICommandInterface iService = null;

//服務連結類,用于執行個體化服務接口

private static ServiceConnection conn = new ServiceConnection() {

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

iLock.lock();

iService = ICommandInterface.Stub.asInterface(service);

if (iService != null) {

try {

iCondition.signalAll();

} catch (Exception e) {

e.printStackTrace();

}

} else

bindService();

iLock.unlock();

LogUtil.i(TAG, "onServiceConnected");

}

@Override

public void onServiceDisconnected(ComponentName name) {

iService = null;

LogUtil.i(TAG, "onServiceDisconnected");

}

};

//鎖

private static Lock iLock = new ReentrantLock();

//等待與喚醒

private static Condition iCondition = iLock.newCondition();

//執行參數

private String parameter;

//是否取消測試

private boolean isCancel;

public CommandModel(String... params) {

//check params

if (params == null)

throw new NullPointerException();

//run

StringBuilder sb = new StringBuilder();

for (String str : params) {

sb.append(str);

sb.append(" ");

}

this.parameter = sb.toString();

}

public static String command(CommandModel model) {

//檢測是否取消測試

if (model.isCancel)

return null;

//check Service

if (iService == null) {

iLock.lock();

try {

iCondition.await();

} catch (InterruptedException e) {

e.printStackTrace();

}

iLock.unlock();

}

String result;

try {

result = iService.command(model.parameter);

} catch (Exception e) {

e.printStackTrace();

bindService();

result = command(model);

}

return result;

}

private static void bindService() {

Context context = GlobalValue.getContext();

Intent intent = new Intent(context, CommandService.class);

context.startService(intent);

context.bindService(intent, conn, Context.BIND_AUTO_CREATE);

}

public void cancel() {

isCancel = true;

}

static {

bindService();

}

}//源代碼片段來自雲代碼http://yuncode.net

java執行指令行_[Java]執行指令行語句