@first 对不起我的英语不好。
我创建了一个自己的监听器。我想更改 TextView,当从服务中调用 MainActivity 中的侦听器时。我自己的 Listener 的想法来自:
http://tseng-blog.nge-web.net/blog/2009/02/17/how-implement-your-own-listener-android-java/
在代码示例中,TriggerMethod() 是从服务中运行的计算线程调用的。我解决了这个问题,但我发现它不是很好,因为在每个新活动中我都必须创建一个新线程。是否可以创建一个可以自动更改 UI 的界面/侦听器?
用于解决问题:http:
//developer.android.com/guide/components/processes-and-threads.html
结果监听器.java:
public interface ResultListener {
public void onResultAvailable(double result);
}
SimuService.java:
public class SimuService extends Service {
private ResultListener mResultListener = null;
public void setResultListener(ResultListener listener){
mResultListener=listener;
}
public void triggerMethode(){
observeResultDouble=getObserveDouble;
mResultListener.onResultAvailable(observeResultDouble);
}
主要活动:
public class MainActivity extends FragmentActivity{
TextView txtView;
ResultListener mResultListener;
SimuService mSimuService;
protected void onCreate(Bundle savedInstanceState) {
txtView = (TextView) findViewById(R.id.txtServiceTime);
//Create Service .....an Bind
mResultListener = new ResultListener() {
@Override
public void onResultAvailable(double result) {
txtView.setText("Result: "+result);
}
};
mSimuService.setResultListener(mResultListener);
}
我的解决方案:
ResultListener = new ResultListener() {
@Override
public void onResultAvailable(double result) {
this.result=result;
runOnUiThread(setNewDataToUI);
}
};
private Thread setNewDataToUI = new Thread(new Runnable() {
@Override
public void run() {
txtView.setText("Result: "+result);
}
});