Android服务和UI线程

11

我在我的应用程序中运行了一个服务。

这个服务有一个对象用于向服务器发送消息和一个函数来获取该对象并使用它。

该对象从服务中初始化,但当UI获取此对象并使用它时,它似乎在UI线程上使用它。

这是正确的吗?是否有一种方法可以使我的对象始终从服务线程运行?

public class ServerMessagesManager extends Service {
    private ServerMessagesReceiver serverMessageReceiver;
    @Override
    public void onCreate() {
        super.onCreate();
        this.serverMessageReceiver = new ServerMessagesReceiver(app);
    }

    public ServerMessagesReceiver getServerMessagesReceiver()
    {
        return serverMessageReceiver;
    }
}

一个服务在 UI 线程上运行。查看 IntentService 以了解在分离的线程上运行部分进程的服务。 - njzk2
2个回答

27

使用 IntentService 而不是 Service。如果你在一个 Service 中进行网络调用,那么UI将会卡顿。因此,使用一个 IntentService ,因为它使用了一个单独的 Thread

你无法预知何时从服务器检索数据。如果在网络调用仍在进行时访问对象,则可能会引发 NullPointerException。使用 BroadcastReceiver 来触发 Intent,以便每当服务器响应时都会通知。


5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接