我在从 WindowManager 中删除视图时遇到问题。这是我要调用的方法:
public void updateDockNow (String jsonData) {
getWM().removeView(getView());
setView(new Stuff(jsonData));
getWM().addView(getView(), getParams());
}
从在 onCreate 中初始化的 onChange 方法调用时,它可以完美运行。
observer = new ContentObserver(new Handler()){
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
updateDockNow(DockPicker.getDockStringAsync(DockService.this));
}};
但是,从这里调用它会失败,也在 onCreate 中初始化。
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
if (decision) { updateDockNow(info); } // Problem
}
}, 0, 1, TimeUnit.SECONDS);
我不能从另一个线程调用 updateDockNow 吗?为什么它在一种情况下有效,而在另一种情况下无效?
注意:这不是从 Activity 运行的,而是从 Service 运行的。
谢谢
- 回答 -
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.scheduleAtFixedRate(new Runnable() {
public void run() {
if (decision) { threadMsg(item); } // Problem
}
private void threadMsg(String msg) {
if (!msg.equals(null) && !msg.equals("")) {
Message msgObj = handler.obtainMessage();
Bundle b = new Bundle();
b.putString("message", msg);
msgObj.setData(b);
handler.sendMessage(msgObj);
}
}
private final Handler handler = new Handler() {
public void handleMessage(Message msg) {
String reply = msg.getData().getString("message");
if ((null != reply)) {
Log.i(TAG, "SETTINGS UPDATED, hurray!");
getWM().removeView(getView());
setView(new Dock(DockService.this, reply));
getWM().addView(getView(), getParams());
}}
};
}, 0, 1, TimeUnit.SECONDS);