2014-02-09 9 views
1

내 안드로이드 프로젝트에서 30 초마다 비동기 작업을 실행하고 싶습니다. 나 자신의 채팅 시스템을 구현하고 30 초마다 새 메시지를 확인하려고합니다.안드로이드에서 코드를 주기적으로 실행하는 방법은 무엇입니까?

기본적으로 어떤 활동이 실행 중인지 상관없이 코드를 실행하고 싶습니다.

그래서 새로운 메뉴를 만들 때 활동을 끝내지 않아 사용자가 앱을 사용하는 경우 항상 메인 메뉴 활동을 생각하고있었습니다. 그러나 새로운 활동을 열어도 코드는 계속 실행됩니다.

또한 앱을 닫을 때 코드가 중지되어야합니다. 나는 앱이 최소화되었다고해도 코드가 계속 실행되면 좋지만 필요하지는 않습니다. 상단 바에 알림 아이콘을 표시 할 계획입니다.

어떻게 Android에서이 작업을 수행 할 수 있습니까?

+2

AsyncTask는 작업을 시작한 활동과 연결되어있어 작동하지 않습니다. 대신 서비스를 사용하십시오. –

+0

예를 보여 줄 수 있습니까? – omega

+0

패턴이 잘못되었습니다. 실제 이득이없는 배터리 및 네트워크 소모가 많습니다. 이것은 크게 사용자를 괴롭 히고 나를 앱 제거로 안내합니다. 대신 소켓이나 알림을 사용하십시오. –

답변

0

ScheduledExecutorService를 살펴보십시오. 그것은 정확히 당신이 필요로하는 것입니다. 이 예에서는 매분마다 새 메시지를 확인하는 메서드를 실행합니다. 백그라운드 서비스에 대한 매니페스트에 적절한 사용 권한을 추가해야합니다.

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5); 

// This schedule a runnable task every minute 
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 

    public void run() { 

checkNewMessages(); // your method to check for messages here 

} 
    }, 0, 1, TimeUnit.MINUTES); // you can also uses seconds 
0

Service을 시작해야합니다. 서비스가 실행되는 동안 startForeground()으로 전화하여 원하는 알림을 추가 할 수 있습니다. 이제 서비스가 실행되는 동안 30 초마다 asynctask를 호출해야합니다. 하나의 옵션은 핸들러를 생성하고 asynctask를 호출 할 postDelayed을 호출하는 것입니다. asynctask가 완료되면 (실패한 경우) postDelayed를 호출합니다. 앱이 닫히면 stopService를 바인딩 해제하거나 호출 할 수 있습니다.

0

질문에 대답하려면 배경에서 작동하는 IntentService을 실행할 수 있습니다. onHandleIntent에서 모든 작업을 수행 한 후 AlarmManager을 사용하여 30 초 후에 다시 일정을 조정할 수 있습니다.

그러나 채팅 응용 프로그램을 30 초마다 폴링하는 것은 끔찍한 생각입니다. 당신은 불필요하게 사용자의 배터리를 죽일 것입니다. 대신 푸시 알림을 사용하십시오.

관련 문제