我有一个应用程序,显示一些测量值,如温度,速度等。
我想或多或少地坚持MVC模式,所以我得到的东西在它们出现时(从蓝牙组件)接收值并将它们分类到特殊值处理程序。那些应该计算东西等等(来自地理坐标的速度等)并将值传递给View组件,它扩展了活动并且应该打印值。一些值处理程序将在它们自己的线程中,或者整个值处理程序事物将是一个单独的线程。
所以首先我尝试了“runOnUIThread”,但这并不像我想要的那样导致很多值在UI线程中没有其他任何事情发生,而且它不是MVC模式的想法。
然后我考虑了处理程序,但是我遇到了一个问题,我无法从其他线程“找到”处理程序,因此我必须将其传递掉,这是我需要做的很多标题更改。
然后我想到了一个静态方法的私有类,可以从任何地方访问,但如果这很聪明,那就不知道了。
你有什么建议,可以给我一些例子吗?
答案 0 :(得分:1)
你试过AsyncTask吗?您可以创建一个扩展AsyncTask的类,并包含一个简单的回调接口,如:
class CalculationTask extends AsyncTask<Integer, Integer> {
...
public interface Callback{
void onCalculationComplete(Integer result);
}
...
}
现在,从doInBackground()
覆盖AsyncTask
方法,并将计算的程序逻辑放入其中。
@Override
protected int doInBackground(Integer... params){
makeNeededCalculation();
...
}
计算完成后,AsyncTask将调用其onPostExecute()
方法。在此方法中,您可以参考您的回调接口。
@Override
protected void onPostExecute(Integer result){
mCallback.onCalculationComplete(result);
}
然后你应该在接收值bluetooth并在那里实现回调接口的类中创建一个AsyncTask实例。
new CalculationTask(this, new CalculationTask.Callback(){
@Override
public void onCalculationComplete(Integer result){
mView.setText("The new value is "+result);
}
}).execute(valueFromBluetooth);