Android的服务和UI线程(Android Service and UI Thread)

2019-07-19 07:05发布

我在我的应用程序中运行的服务..

这项服务发送消息给服务器和一个函数来获取该对象,并使用它的对象。

该对象从服务初始化,然而当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;
    }
}

Answer 1:

使用IntentService ,而不是Service 。 如果您在做网络电话Service ,用户界面将卡住。 因此,使用IntentService ,因为它使用一个单独的Thread

你不知道什么时候一个服务器消息将检索数据。 一个NullPointerException ,如果对象是,只要网络电话仍在进行访问可能会被抛出。 使用BroadcastReceiver s到火的Intent ,每当一个服务器响应。



Answer 2:

据我所知,在UI线程的Android服务运行。 如果你想异步工作,你应该使用Intent Service
请参阅: 什么是一个IntentService和服务之间的区别?
下面是一个意图服务的例子 ,你可以试试。



文章来源: Android Service and UI Thread