gpt4 book ai didi

android - Binder 服务作为一个单独的线程

转载 作者:行者123 更新时间:2023-11-29 17:54:03 27 4
gpt4 key购买 nike

我创建了一个在单独进程中运行的服务

<service
android:name="dashboard.main.InterfaceService"
android:exported="false"
android:process=":ServiceProcess" >
</service>

我读过,当服务作为单独的进程进行时,它是在一个单独的线程上而不是在主线程上。当我在服务中执行 HTTP 请求时,出现异常:Thread forbids Http

主线程和服务线程的线程信息都是一样的main:(id)1:(priority)5:(group)main.

服务在 MainActivitystarted/bind()。之间的交互是使用AIDL。

连接服务后,MainActivity 持有服务返回的对象的引用,我使用此对象进一步调用服务方法。

在 DDMS View 中,可以看到两个独立的进程

请帮忙,我需要让服务在自己的线程上运行

------------新信息正如“acj”所建议的那样——我在所有类(class)中都进行了 PID 检查。由于这两个进程有不同的堆,通过 AIDL 从我的服务返回的对象在 Activity 堆中制作了另一个副本。所以每次我使用这个对象来启动 Http 请求时,我都在使用 Activity Process Heap 中存在的对象,即它在主线程上。

我的推理是否正确?

最佳答案

不要查找线程信息,而是打印进程和/或线程 ID 以确认服务和应用程序是否在单独的线程/进程中运行。

android.os.Process.myPid()/android.os.Process.myTid()

我最好的猜测是,默认情况下,Android 中的每个单独进程都有一个主线程,这可能是因为您看到了相同的信息。此外,如果这是真的,那么主线程永远不允许进行任何网络调用,这也是进程运行服务的应用程序,您必须使用一些 AsyncTask 或为此创建一个新线程。希望对您有所帮助。

关于android - Binder 服务作为一个单独的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20857101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com