我有一個Android應用程序有三個線程,主線程和兩個工作線程。這些線程需要定期互相通信。調試一個凍結的Android應用程序
我原本是以一種可怕的方式去做這件事,這裏的每個人都會嚷嚷我。我保存了每個線程中的線程實例,並在線程需要該功能時從其他線程調用該類的方法。它有效,但我知道這是不對的。
因爲這是錯誤的,我回去並將線程的每個實例更改爲線程處理程序的實例,並且每個線程函數調用我用一個handler.sendMessage調用替換。
現在該程序不起作用。它只是凍結,我不知道發生了什麼。當使用調試透視圖時,我逐步通過主線程,但我得到的是功能
boolean hasMessages(Handler h, int what, Object object)
{
...
}
from MessageQueue。其他線程在run()函數中循環,這些函數沒有做任何令人興奮的事情。我的日誌都沒有打印。我對正在發生的事情感到不知所措,我不知道下一步應該採取什麼措施繼續進行調試。我改變的只是添加處理程序和發送消息。你們可以提出我應該採取的任何調試步驟嗎?
編輯:下面是一些代碼,我有沒有運氣
主要活動:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
connectionStatusTextView = (TextView) findViewById(R.id.connectionStatus);
imageView = (ImageView) findViewById(R.id.imageView);
commandView = (TextView)findViewById(R.id.commandView);
focusView = (TextView)findViewById(R.id.focusView);
mApplication = ((myApplication) this.getApplication());
ConnectedThread connectedThread = new ConnectedThread(mHandler, mApplication);
VoiceRecognitionThread voiceThread = new VoiceRecognitionThread(mApplication, this);
connectedThread.setHandlers(mHandler, voiceThread.getHandler());
voiceThread.setHandlers(mHandler, connectedThread.getHandler());
connectedThread.start();
voiceThread.start();
}
ConnectedThread和VoiceRecognitionThread都擴展HandlerThread。它們都創建一個處理髮送給這些線程的消息的類級處理程序。 getHandler返回對這些處理程序的引用。
你有備份嗎? –
你有密碼嗎? – 323go
@MatiCicero我有一個備份,但由於代碼違反約定,我寧願解決這個問題,而不是回到工作,但不正確的版本 – RoboCop87