2016-09-20 3 views
-4

우리는 작업을 10 초마다 처리해야하는 앱이 있습니다. 이것은 다소 정확해야합니다. 즉, 1 또는 2 초의 차이는 OK이지만, 20 초 이상의 간격은 아닙니다.Android : 10 초마다 작업 (정확히)

앱이 열려 있거나 전면 또는 배경에 관계없이 작동해야합니다.

AlarmManager을 통해 구현하지만 제대로 작동하지 않습니다. 스마트 폰이 연결되어 있지 않고 백그라운드에서 실행중인 경우 실행에 간격이 있습니다. Android 4.3.

, 우리는 우리가 적은 격차를 Android 5.x으로, 수시로 간격 (약 30 초)을 가지고 있지만, 5 또는 10분 길이에 대한 차이!

이것을 구현하는 방법이 있어야한다고 생각합니다. 알람 시계도 가능하며 정확합니다.

앱에 대한 추가 정보 : 서비스에서 작동하며 브로드 캐스트 리시버가 구현되었습니다. 즉, 앱을 지우거나 다시 시작하면 서비스가 다시 시작됩니다. 이것은 올바르게 작동합니다. 유일한 문제는 10 두 번째 작업입니다.

힌트가 있습니까? 자명종은 어떻게 구현 되나요? 어떤 전화, API?

지금까지는 성공하지 못했지만 다른 방식으로 시도했습니다. "서비스"를 "수신기 방송"와와 "알람 관리기"의

감사 한스

답변

0
public void callAsynchronousTask() { 
    final Handler handler = new Handler(); 
    Timer timer = new Timer(); 
    TimerTask doAsynchronousTask = new TimerTask() {  
     @Override 
     public void run() { 
      handler.post(new Runnable() { 
       public void run() {  
        try { 
         PerformBackgroundTask performBackgroundTask = new PerformBackgroundTask(); 
         // PerformBackgroundTask this class is the class that extends AsynchTask 
         performBackgroundTask.execute(); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 10000); //execute in every 10000 ms 
} 
-2

사용. 이 3 가지 구성 요소는 요구 사항을 충족시킵니다.

알람 관리자를 사용하여 브로드 캐스트 리시버를 생성하고 BroadcastReceiver에서 원하는 로직 코드를 입력하여 10 초마다 작업을 수행 할 수있는 서비스를 시작하십시오.

+2

나는 안드로이드 선호 생각하는 핸들러 실행 가능한 함께 할 수 있습니다. –

+0

안녕하세요. 나는 AlarmManager로 시도한다. 이 작품은 내 Tast 10 초마다 호출됩니다. 그러나 잠시 후 5 ~ 10 분 동안 전화하지 않습니다! 앱이 몇 분 또는 몇 시간 동안 실행되고 매시간마다 발생합니다. 나는 이유를 모른다. – Hans

+0

그것은 당신을 위해 일한 것을 듣고 좋다. 나는 당신의 현재 문제를 이해합니다. 이것은 대개 coz 서비스가 자원 부족이나 기타 이유로 중지되었을 수 있습니다. 따라서 매번 실행되도록하려면 다른 브로드 캐스트 수신기에도 등록해야합니다. 예를 들어 wake_up 권한을받은 후 Wake_up에 등록해야합니다. 사용자가 전화를 사용할 때마다 브로드 캐스트 리시버가 호출되며 원하는 서비스가 실행 중인지 여부를 확인할 수 있습니다. 시작하지 않으면 서비스를 시작하십시오. sharedprefs를 사용하여 토스트라는 마지막 시간 서비스 값을 저장할 수도 있습니다. –

0

당신은 .. 다소 모호하고 불완전한 답이다

public class ActivityMain extends Activity 
{ 
    private Handler mainHandler = new Handler(); 
    private Runnable backgroundTask = new Runnable() { 
     @Override 
     public void run() { 
      //do your background task 
      mainHandler.postDelayed(this, 10000); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mainHandler.postDelayed(backgroundTask, 10000); 
    } 
} 
+0

나는 이것을 성공 시키려고 노력했다. 몇 초 또는 몇 분의 대문자가 있습니다. 나는 이유를 모른다. 앱이 전경과 배경에서 작동해야합니다. – Hans

관련 문제