2013-03-21 3 views
0

나는 사용자가 관련된 5-6 개의 활동이있는 응용 프로그램에서 작업 중입니다. 이 중에 일부 데이터가 생성되어 데이터베이스에 저장됩니다.서비스를 사용하지 않는 백그라운드 작업 - Android

서버간에 데이터를 업로드/동기화해야합니다 (KSOAP2 사용). 그러나 이것은 뒤에 일어날 것입니다. 사용자가 활동간에 점프하더라도 영향을받지 않아야합니다. 그러나 앱을 종료 할 때 나는이 과정을 계속하기를 원하지 않는다.

Android 서비스가 유일한 방법입니까? 최선의 선택은 무엇입니까?

+0

IntentService는 원하는 것을 정확하게 수행합니다. 왜 그것을 사용하지 않는 것을 선호합니까?AsyncTask와 좋은 비교를 위해이 링크를 참조하십시오. http://stackoverflow.com/a/4177349/530039 – akaya

+0

OK .. 감사합니다. 그러나 제 경우에는, 1. 나는 어떤 일이 일어나고 있다는 것을 사용자에게 알리고 싶지 않습니다. 사용자가 다양한 활동의 ​​일부 항목을 채우는 동안 업로드 프로세스 (비누 호출)가 발생해야합니다. 즉, 배경 지식이 있어야하며 사용자가 자신의 작업을 방해하지 않기를 바랍니다. 이것은 가능하다 ? –

+0

사용자에게 전혀 알릴 필요가 없습니다. 서비스는 당신이 원하는 것처럼 아주 배경적인 것을 의미합니다. 시도 해봐. – akaya

답변

1

당신은

http://developer.android.com/reference/android/os/AsyncTask.html 비동기 작업을 사용할 수 있습니다. 4 단계 아래의 문서를보십시오.

AsyncTask는 스레드 및 처리기 주위의 도우미 클래스로 디자인되었으며 일반 스레딩 프레임 워크를 구성하지 않습니다. AsyncTasks는 짧은 작업 (최대 몇 초)에 이상적으로 사용되어야합니다. 오랜 시간 동안 스레드를 계속 실행해야하는 경우 java.util.concurrent pacakge에서 제공하는 다양한 API를 사용하는 것이 좋습니다. Executor, ThreadPoolExecutor 및 FutureTask. 된 setContentView 후 활동()

pd= new ProgressDialog(this); 
    pd.setTitle("Making Soap Request"); 
    new SoapRequestTask().execute(); 

private class SoapRequestTask extends AsyncTask<VOid, Void, Void> { 

    protected void onPreExecute() 
    { 
     pd.show(); 
    } 
    protected SoapObject doInBackground(Void... params) { 
    // TODO Auto-generated method stub 
      //Soap request. do not update ui here 
    return null; 
    } 

protected void onPostExecute(Void param) 
{ 
     //update ui here 
    pd.dismiss(); 

} 

대안 AsyncTask를하기에

는 Robospice입니다. https://github.com/octo-online/robospice.

여기에서 robopice를 시작할 수 있습니다. https://github.com/octo-online/robospice/wiki/Starter-Guide.

robospice 샘플은 https://play.google.com/store/apps/details?id=com.octo.android.robospice.motivations&feature=search_result입니다.

robospice의 기능 중 일부입니다.

1. 백그라운드 AndroidService 네트워크 요청 (예 : Spring Android를 사용한 REST 요청)을 비동기 적으로 실행합니다.

2 is is strongly typed! POJO를 사용하여 요청을하면 요청 결과로 POJO가 생깁니다.

3. 요청에 사용 된 POJO 나 프로젝트에서 사용하는 활동 클래스에 제약 조건을 적용하지 않습니다.

4. 결과 (잭슨과 Gson, 또는 Xml, 플랫 텍스트 파일 또는 바이너리 파일이있는 Json에서 ORM Lite 사용).

은 네트워크 요청의 결과 귀하의 활동 (또는 다른 컨텍스트를) 5.notifies 경우 그들은 여전히 ​​살아있는 경우에만

모든 안드로이드 로더와 같은 메모리 누수 6.no

, 안드로이드 AsyncTasks 통지는 달리 그들의 UI 스레드에서 귀하의 활동.

7. 단순하지만 강력한 예외 처리 모델입니다.

+0

OK .. 감사합니다. 하지만 내 경우에는 1. 사용자에게 문제가 있음을 알리고 싶지 않습니다. 사용자가 다양한 활동의 ​​일부 항목을 채우는 동안 업로드 프로세스 (비누 호출)가 발생해야합니다. 즉, 배경 지식이 있어야하며 사용자가 자신의 작업을 방해하지 않기를 바랍니다. 이것은 AsyncTask를 통해 가능합니까? –

+0

그런 경우에는 장시간 운영되는 작업이나 robospice를 점검해야하는 경우 서비스를 사용해야합니다. – Raghunandan

관련 문제