package org.cocoa4android.ns; import android.os.Looper; public class NSThread extends NSObject { public static boolean isMainThread(){ return Looper.myLooper() == Looper.getMainLooper(); } private NSInvocation invocation; private Thread thread; private boolean isFinished = NO; public NSThread(String selector,Object target,Object data){ NSMethodSignature signature = class2NSClass(target.getClass()).instanceMethodSignatureForSelector(selector); invocation = NSInvocation.invocationWithMethodSignature(signature); invocation.setTarget(target); invocation.setArgument(data, 2); thread = new Thread(new Runnable() { @Override public void run() { isFinished = NO; isCancelled = NO; invocation.invoke(); isFinished = YES; } }); } public static NSThread detachNewThreadSelector(String selector,Object target,Object data){ NSThread t = new NSThread(selector, target, data); t.start(); return t; } public void start(){ thread.start(); } public void cancel(){ thread.interrupt(); isCancelled = YES; } public boolean isExecuting(){ return thread.isAlive(); } public boolean isFinished(){ return isFinished; } private boolean isCancelled = NO; public boolean isCancelled(){ return isCancelled; } public String name() { return thread.getName(); } public void setName(String name) { this.thread.setName(name); } public void setThreadPriority(double priority){ this.thread.setPriority((int) priority); } public double threadPriority(){ return this.thread.getPriority(); } }