我正在使用教程here開發一個服務(現在)只是運行一個TimerTask
來每秒鐘完成System.out.println("tick")
。我的代碼與網站上的代碼完全一樣,除了一些名稱更改外。如果我不嘗試從服務傳遞字符串到活動,一切正常(服務運行,輸出「打勾」)。CalledFromWrongThreadException使用服務IPC連接
我正在努力完成的工作是在主Activity中獲取一個TextView,使用從服務接收的字符串進行更新。我有一個append(String)
方法工作正常,將用新文本更新TextView。所以在我服務的TimerTask
我添加listener.handleMessage("tick")
和我的活動實現監聽功能:
public void handleMessage(String msg) throws RemoteException {
append(msg);
}
當我運行應用程序,System.out
顯示「嘀」,然後用CalledFromWrongThreadException
堆棧跟蹤,指着append()
方法作爲問題的根源。
我知道這個例外有幾個問題,但其中大多數涉及Thread
和Handler
問題;我找不到有關服務的任何信息。任何人都知道這是可能的嗎?
解決方案
擴展了Runnable:
class MyRunnable implements Runnable {
private String msg;
public MyRunnable(String msg) {
this.msg = msg;
}
public void run() {
appendNewline(msg);
}
}
,並與全球處理程序的調用替換回調:
public void handleMessage(String msg) throws RemoteException {
handler.post(new MyRunnable(msg));
}
那麼,我猜其他問題_did_必須與我的。希望別人會發現這有用,雖然:第 – Snailer