Android线程未在后台运行

时间:2016-01-10 22:13:31

标签: java android multithreading

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中,它是从一个服务开始的,但这个巨大延迟的主要原因是什么?

2 个答案:

答案 0 :(得分:1)

确保按照以下方式运行Runnable:

Thread t = new Thread(new ServiceHelper());
t.start();

只有这样才能以线程开始。

另一方面,您正在做的是运行无限循环,这将占用100%的CPU。 Android可能会杀死或严重限制您的服务,以允许其他服务正常运行。

答案 1 :(得分:-1)

在while循环内部使用类似的东西,你会看到结果

Thread.sleep(1000);