我在Android上的線程沒有正確運行。 我開始從一個服務,但爲什麼它沒有正確運行。Android線程未在後臺運行
服務:
ServiceHelper sh = new ServiceHelper();
new Thread(sh).start();
public class ServiceHelper implements Runnable {
public void run() {
while(true) {
Log.d(LOG_TAG, "run");
//1.) sometimes it calls this here: SSLSocket.close();
//2.) also, sometimes it calls a write operation on this SSLSocket.
// but since write can block, I've put this write operation inside an AsyncTask: new WriteAsyncTask().execute(somethingToWrite);
// This returns immediately.
Thread.sleep(1000);
}
}
}
,這導致logcat的是這樣的:
01-10 22:39:54.148 I/TEST(10327): run
01-10 22:40:04.150 I/TEST(10327): run
因此,有像10秒錯過這個線程。 爲什麼會發生這種情況? 當然還有其他線程可以阻止網絡操作。 但是爲什麼這個特定的線程沒有運行?
我還注意到一個很奇怪的事情:
public void run() {
while(true) {
Log.i(LOG_TAG, "tick1");
Thread.sleep(1000);
Log.i(LOG_TAG, "tick2");
}
}
並不知我得到這個在日誌中:
01-11 22:06:54.649 I/BGService(10078): tick1
01-11 22:07:50.664 I/BGService(10078): tick2
tick1之間和tick2有一個且只有一個操作:的Thread.sleep (1000)。它幾乎可以阻塞一分鐘? 這是在一個線程,它是從一個服務啓動,但是這個巨大的延遲的主要原因是什麼?
有沒有在你的代碼有什麼用線程。 – CommonsWare
好的,我只是想告訴你一個非常基本的減少我的應用程序。但是,每秒鐘將消息打印到logcat中的線程看起來都是一樣的。 – Daniel
因此,爲了更多瀏覽,似乎SSLSocket.close()可以阻止整個步驟。 – Daniel