大家好。我的简单 Android 应用程序现在遇到了很大的问题。
我拥有的 2 个主要元素是绑定的 Service和主要的Activity。我希望 Activity 显示(通过 TextViews)服务发现某些东西的事实。为此,我在 Service 中声明了一个 Listener 接口,处理向他注册的侦听器列表,并使用特定方法通知侦听器。
我的服务
void notifyNewElement(){
for (Listener listener : listeners) {
listener.handleNewElement(this);
}
}
public interface Listener {
void handleNewElement(MyService sender);
}
private List<Listener> listeners = new ArrayList<Listener>();
public void addListener(Listener listener) {
this.listeners.add(listener);
}
public void removeListener(Listener listener) {
this.listeners.remove(listener);
}
主要活动
buttonStart.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View view)
{
registerListener();
}
});
buttonStop.setOnClickListener(
new View.OnClickListener()
{
public void onClick(View view)
{
unresgisterListener();
}
});
void registerListener(){
tService.addListener(this);
}
void unresgisterListener(){
tService.removeListener(this);
}
public void handleNewElement(MyService sender) {
Log.d("NEW_ELEM","new element found");
message_box.setText("new element found");
}
我当然在 Activity 中恢复了 TextViews 等,我不必在这里显示代码,因为我知道那方面一切都很好。正如您在最后一个方法中看到的那样,Log.d() 工作正常,该方法确实被触发了。但是当我想更新 TextView时,Activity无法做到,而且服务停止了他的计算。有趣的是,如果我取消注册侦听器并再次注册它(通过您可以在 Activity 中看到的 2 个按钮),则在触发 handleNewElement 时服务计算不会再停止,但 TextView 仍然没有更新(它只是不再阻塞)。
我在另一个应用程序中使用了完全相同的设置,它就像一个魅力:/
如果你们对造成所有这些麻烦的原因有任何想法,很高兴与您分享!
提前致谢。