2011-08-11 2 views
0

백그라운드에서 주기적으로 (10 초) 몇 가지 작업을 실행해야하는 애플리케이션을 개발 중입니다. 이를 위해 저는 서비스와 타이머를 사용합니다. 타이머에서 수행 할 실제 작업은 다음과 같습니다.
1) 전화 (ContentResolver 사용)에서 SQLite 데이터베이스로 데이터를 수집하는 경우
2)이 데이터를 HttpPost 메서드를 사용하여 원격 서버에 동시에 전송합니다.안드로이드 타이머 및주기 변경하기

문제는 다음과 같습니다. 일부 반복 (이 반복 횟수로 인해 앱이 실행될 때마다 변경됨) 타이머는 기간을 변경하고 모든 작업을 1-3 초 (때로는 최대 9 개)로 시작하지만 때로는 낮아집니다 10 초) 지연, 내 경우에는 너무 빠르며 이유를 찾을 수 없습니다. 전에 비슷한 행동을 한 사람이 있습니까?

나는 타이머 작업 내에서 업로드 및 수집을 위해 다른 스레드를 사용하려고 시도했지만 문제를 해결하지 못했습니다.

여기에 내 코드 조각입니다 :

public class DataForward extends Service{ 
private Context con = getBaseContext(); 
private Timer timer = new Timer(); 
<...> 
@Override 
public void onStart(Intent intent, int startId) { 
     timer.schedule(new TimerTask(){ 
     @Override 
     public void run() { 
      try { 
       updateData(); 
      NetworkManager network = new NetworkManager(con); 
        if(network.isConnectedToTheInternet())   
       uploadData(); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 


     }}, 0, 10000); 
} 
} 
<...> 
} 

아니면 실제 타이머없이이 작업을 수행하는 또 다른 방법이있다? 어떤 아이디어?

답변

0

당신은 안드로이드 OS가

을 유지하기 위해 inorder를 그것의 RAM에 낮은 것 발견하면 당신이

backgroundTask (서비스)가 살해 당할 수 있다는 그 때문에 가능한 서비스에 자사의 실행을 이야기하기 때문에 그 이유는, 수

foreGround 응용 프로그램 실행 .. 그리고 다시 무료 RAM을 얻을 때 다시 서비스를 다시 시작하므로

타이머가 계속해서 다시 시작될 수 있습니다. 보기를 읽기위한

.. SERVICE

시간의
0

첫 번째 실행은 0 밀리이며, 이후의 실행은 다시 내부 작업 management.So에 대한 서비스를 중지 할 수 있습니다 (10 개) millis.But 안드로이드 OS 후에 때 서비스 시작이다 몇 시간 후 다시 타이머를 재설정합니다. 그래서, 즉시 작업을 실행합니다. 문제의 이유를 생각해보십시오. 첫 실행을위한 최소 시간을 설정하거나 반복 알람을 사용할 수 있습니다.