Android上的My Thread运行不正常。 我是从服务开始的,但有些人为什么不能正常运行。
服务:
O(N)
这导致logcat像这样:
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);
}
}
}
所以有10秒就错过了这个帖子。 为什么会这样? 当然还有其他线程阻止网络操作。 但为什么这个特殊的线程没有运行?
我也注意到一件非常奇怪的事情:
01-10 22:39:54.148 I/TEST(10327): run
01-10 22:40:04.150 I/TEST(10327): run
不知怎的,我在日志中得到了这个:
public void run() {
while(true) {
Log.i(LOG_TAG, "tick1");
Thread.sleep(1000);
Log.i(LOG_TAG, "tick2");
}
}
在tick1和tick2之间只有一个操作:Thread.sleep(1000)。怎么能阻挡差不多一分钟? 它位于一个Thread中,它是从一个服务开始的,但这个巨大延迟的主要原因是什么?
答案 0 :(得分:1)
确保按照以下方式运行Runnable:
Thread t = new Thread(new ServiceHelper());
t.start();
只有这样才能以线程开始。
另一方面,您正在做的是运行无限循环,这将占用100%的CPU。 Android可能会杀死或严重限制您的服务,以允许其他服务正常运行。
答案 1 :(得分:-1)
在while循环内部使用类似的东西,你会看到结果
Thread.sleep(1000);