2013-06-17 2 views
0

앱을 만들었습니다. 서비스를 시작합니다 (onStartCommand 유형). 그것은 모니터에서 클립 보드를 유지하는 스레드를 생성합니다android, 서비스를 실행중인 스레드를 유지하는 방법은 무엇입니까?

private class MonitorTask extends Thread { 
    @Override 
    public void run() { 
     mKeepRunning = true; 
     while (true) { 
      doTask(); //-this function uses the toast to show the string in clipboard 
      try { 
       Thread.sleep(300); 
      } catch (InterruptedException ignored) { 
      } 
      if (!mKeepRunning) { 
       break; 
      } 
     } 
    } 

은 내가 통과 잠시 후, 서비스 (서비스 관리자를 실행에 따라)이 여전히 발견하지만, 스레드는 사라졌다. 사용자가 앱을 닫을 때까지 스레드를 영원히 계속 실행하려면 어떻게해야합니까?

InterruptedException이 될 수 있습니다. 스레드를 다시 시작하기 위해 catch를 어떻게 사용할 수 있습니까?

일부 오래된 스레드는 AlarmManager를 사용하여 "서비스를 시작하고 무언가를하고 서비스를 닫습니다"라고 언급 한 적이 있지만 규칙적인 간격으로 서비스를 제공하지만 좋은 생각은 아닙니다.

일반적인 방법이나 좋은 아이디어가 있다면 알려주십시오. 미리 감사드립니다.

업데이트 실제로, 나는 ClipboardManager가 있다는 것을 알고 있지만,이 하나가 android 2.3.4와 호환되지 않는다는 것을 알고 있습니다. 게다가, 서비스중인 쓰레드를 만들고 싶다면 어떻게 죽일 지 어떻게 알 수 있습니까? 감사합니다

답변

1

당신이하려는 일을 성취하는 가장 좋은 방법은 ClipboardManager 클래스를 사용하는 것입니다. 항상 OS에 이미 존재할 때 특별히 "모니터링"기능을 소유하지 않도록 노력하고 OS 자체가 이미 제공하는지 확인하십시오 당신이 기대대로와 동작을 트리거링 브로드 캐스트 리시버는,이 클래스에 대한 문서를 살펴 걸릴 : 스레드 실행을 가진 아무것도하지 않고, 배터리 및 성능을 배수의

http://developer.android.com/reference/android/content/ClipboardManager.html

를 대신, 당신은 왜 브로드 캐스트 리시버를 작성 해달라고 클립 보드 작업을 기다리는 중 방법을 사용하십시오.

(210)
ClipboardManager.addPrimaryClipChangedListener(ClipboardManager.OnPrimaryClipChangedListener what) 

는 모든 변경 내용을 알려야하는 ...

감사합니다!

+0

고마워, 업데이트 사실, ClipboardManager 알아,하지만이 안드로이드 2.3.4 호환되지 않습니다 알아요. 게다가, 서비스중인 쓰레드를 만들고 싶다면 어떻게 죽일 지 어떻게 알 수 있습니까? 감사 – manhon

관련 문제