2013-02-14 3 views
1

가속 값을 일정 시간 (약 1 시간) 계속 처리해야하는 앱을 개발 중입니다. 예, 그렇게하고 싶습니다. 처리에는 몇 가지 계산을 수행하고 UI를 수시로 업데이트하는 작업이 포함됩니다. 가속은 (전경) 서비스 내부에서 수집됩니다. 사용자가 앱을 최소화 할 경우 가속을 수집해야합니다.백그라운드에서 Android 연속 가속 처리

제 질문은 이것을 구현하는 가장 적합한 패턴은 무엇입니까? 처리가 앱 UI를 응답하지 않게하기를 원하지 않습니다.

지금은 (서비스에서) UI 스레드에서 가속 데이터를 수집하고 있습니다. 수집 된 데이터는 일부 계산을 수행하는 클래스로 전달되는 대신 Intent를 브로드 캐스팅합니다. Intent는 Main 활동에 등록되어 UI를 업데이트합니다.

서비스의 스레드에서 가속 데이터를 수집해야합니까? (이것도 가능합니까?) 다른 스레드에서 처리해야합니까? (어떻게 UI/가속 컬렉션 스레드 또는 처리 스레드를 굶기 없이이 작업을 수행하는 가장 좋은 방법이 될 것이라고).

감사합니다.

답변

1

확실하게 백그라운드 스레드에서 처리해야합니다. 가장 쉬운 방법은 기존 Service에서 호출 된 AsyncTask에 넣는 것입니다. 처리를 doInBackground으로 옮길 수 있습니다. 또 다른 옵션은 프로세싱을 처리하기 위해 별도의 IntentService을 만드는 것이지만, 나는 AsyncTask으로 충분하다고 생각합니다.

1

AsyncTask를

public class AsyncTaskTestActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     new PostTask().execute(); 
    } 

    // The definition of our task class 
    private class PostTask extends AsyncTask<String, Integer, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     displayProgressBar("Working..."); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     do_background_Stuff(); 

     // call this method whenever you want to run something in the UI thread and then get back to processing 
     publishProgress(i); 
     } 
     return "All Done!"; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     updateProgressBar(values[0]); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dismissProgressBar(); 
    } 
    } 
} 
시도