2013-08-11 3 views
0

내 안드로이드 프로젝트에서 저는 Modbus 통신을 위해 jamod 라이브러리를 사용하고 있습니다. 네트워크 연결을 사용할 수없는 경우를 제외하고는 비동기 작업이 초 단위로 transaction.execute에 걸립니다. 주어진 시간 초과 후 취소하고 싶습니다. 비동기 작업을 취소하기 위해이 핸들러를 구현하려고 시도했습니다.라이브러리의 동기화 된 메소드를 취소하는 방법은 무엇입니까?

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 

     if (task.getStatus() == AsyncTask.Status.RUNNING 
      || task.getStatus() == AsyncTask.Status.PENDING) { 
     task.cancel(true); 
     } 
    } 
    }, WRITE_TASK_TIMOUT); 

그러나이 방법은 작동하지 않습니다. 도서관을 들여다 보니 ModbusTCPTransaction.execute() 메서드가 synchronized()이라는 것을 보았습니다.

이렇게하면 x 초 후에이 방법을 취소 할 수 없습니까?

+0

코드에 대한 추가 정보를 게시하십시오. 문제를 감지하기에 충분하지 않습니다. –

답변

1

Android 클래스 Future을 사용해보세요. 스레드 실행의 시간 초과 기간을 설정하는 메소드가 있습니다.

ExecutorService executor = Executors.newSingleThreadExecutor(); 
Future<String> future = executor.submit(new Task()); 
future.get(5, TimeUnit.SECONDS); 


static class Task implements Callable<String> { 
    @Override 
    public String call() throws Exception { 
     //ModbusTCPTransaction.execute() 
     return null; 
    } 
} 
관련 문제