2013-02-14 56 views
1

我正在開發一個應用程序,需要連續處理加速度值一段時間(大約一個小時) - 是的,我真的很想這樣做。處理涉及進行一些計算並不時更新UI。加速度收集在(前臺)服務中 - 如果用戶最小化應用程序,收集加速應該會發生。Android在後臺連續加速處理

我的問題是:什麼是最合適的模式來實現這一點。我不希望處理使應用用戶界面無響應。

現在我正在UI線程(服務)中收集加速數據。收集到的數據將傳遞給一個進行一些計算的類,並根據它們廣播Intent,該Intent在Main活動中註冊以更新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(); 
    } 
    } 
}