2014-10-28 4 views
0

Android OS 전화의 요구 사항에 따라 특정 간격으로 30 분마다 특정 폴더를 정리하는 앱을 개발 중입니다.파일 정리 서비스

서비스를 실행하고 30 분마다 폴더를 정리할 수 있습니다. 이것에 대해 몇 가지 질문이 있습니다.

1.Service에는 서비스가 시작될 때 실행될 onStartCommand가 있습니다. 여기에 30 분마다 실행되는 Handler가있는 함수를 호출 할 수 있습니까? 예

public int onStartCommand(Intent intent, int flags, int startId){ 
    cleanUpData(); 
    return START_REDELIVER_INTENT; 
} 

public void cleanUpData() 
{ 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     // call the function again 
     cleanUpData(); 
    } 
    }, "30 mins"); 
} 

이 코드는 30 분마다 cleanUpData를 반복합니다. a. 이 올바른지? b. 이것이 성능을 저해 할 것인가? c. 수 많은 자습서에서 언급 한 것처럼 별도의 스레드를 사용해야합니까? d. 결국 서비스를 사용해야합니까? 아니면 다른 방법이 있습니까?

  1. AlarmManager는 예약 된 반복 경보를 제공하지만 전화기가 절전 모드에있을 때는 작동하지 않습니다. 나는 인간의 상호 작용을 요구하지 않기 때문에 스크린을 깨우고 싶지 않다. AlarmManager를 무시할 수 있습니까? 또는 AlarmManager가 전화가 절전 모드이고 전화 깨우기가 거짓 일 때도 코드를 실행할 수있는 기능이 있습니까?

좋습니다. 미리 감사드립니다!

+0

예. onStartCOmmand() 메소드 내에 별도의 메소드를 가질 수 있습니다. – HackerGK

답변

0

폴더를 정리하기 위해 별도의 스레드를 사용해야합니다. 서비스와 동일한 프로세스에서 실행될 때 서비스 내부에서 처리기를 사용하지 말고 장기 실행 작업으로 인해이 사용 대신 응답하지 않을 수 있습니다. intentservice는 자체 스레드에서 실행됩니다. 장치 잠자기 문제로 방송 수신기를 작동시키고이 브로드 캐스트 수신기에서 사용자 지정 웨이크 업 잠금 장치를 확보 한 다음 여기에서 서비스를 호출하십시오.

+0

1. 보류중인 직업이 없으면 intentservice가 서비스를 종료하므로 intentservice를 사용할 수 없다고 생각되면 제안하십시오. 2. 나는 불필요하게 장치를 깨우고 싶지 않다. 웨이크 업으로 인해 디스플레이가 켜지는 경우가 있습니다. 할 수 있습니까? –

+0

예 인텐시티 서비스는 작업이 끝나면 종료되지만 매 30 분마다 브로드 캐스트를 생성하므로 30 분마다 브로드 캐스트 리시버가 다시 시작할 수 있습니다. 깨우지 않고 장치를 깨울 수 있는지는 모르겠다 그것의 디스플레이하지만 당신이 할 수있는 한 가지는 서비스가 시작되고 릴리스 될 때 wakelock을 얻거나 서비스가 끝날 때 장치를 잠자기로 설정합니다. –

+0

당신이 제안한대로 새로운 스레드를 사용하고 스레드를 사용할 수 있습니다. sleep 대신에 30 분을 기다리는()? 유해할까요? –