2013-02-14 67 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(); 
    } 
    } 
}