Android服务和UI线程

Asa*_*evo 11 service android ui-thread

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

此服务有一个用于向服务器发送消息的对象以及一个获取该对象并使用它的函数.

该对象是从服务初始化的,但是当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;
    }
}
Run Code Online (Sandbox Code Playgroud)

kot*_*oti 27

IntentService而不是Service.如果您在a中进行网络呼叫Service,则UI将停滞不前.因此,使用一个IntentService因为它使用单独的Thread.

而且您不知道服务器消息何时将检索数据.NullPointerException只要网络调用仍在进行中,只要访问了对象,就可以抛出A. 每当服务器响应时,使用BroadcastReceivers来触发Intent.


R4j*_*R4j 5

据我所知,Android服务在UI线程上运行.如果要创建异步作业,应该使用Intent Service
See: IntentService和Service之间有什么区别?
这是您可以尝试的Intent服务示例.