Android - IntentService 在使用总线事件调用时在 UI 线程上运行
Android - IntentService runs on UI thread when called with bus event
我有一个 IntentService 可以对我的 API 执行后台请求。
我正在使用 Otto Bus 与它通信。
public class MyService extends IntentService {
private MyAPI mApi;
private MyBus mBus;
MyService () {
super("MyService ");
}
@Subscribe
public void onLoadSearchData(LoadSearchDataEvent event) {
Log.d("onLoadSearchData "+ Thread.currentThread().getName());
mApi.loadSomeData();
}
@Override
protected void onHandleIntent(Intent intent) {
Thread.currentThread().setName(getClass().getCanonicalName());
Log.d("Thread name " + Thread.currentThread().getName());
if (mApi==null) mApi = new MyAPI(getApplicationContext());
if (mBus==null) {
mBus = MyBus.getInstance();
mBus.register(this);
}
}
}
onHandleIntent是在副线程上执行的,这很正常。
但是当我用来自主 ui 的总线事件调用 onLoadSearchData 时, 它在 UI 线程 上运行!! !!
我不明白为什么。
我的目的是为 load/cache 数据创建一个后台线程。
不知道该怎么做。感谢您的帮助。
I don't understand why.
By default, all interaction with an instance is confined to the main thread
更具体地说,Otto 在发布消息的同一线程上传送消息。
My purpose is to have a background thread to load/cache data.
IntentService
有一个后台线程,但只调用 onHandleIntent()
。一旦onHandleIntent()
returns,不仅线程消失了,服务也被销毁了。
我不清楚你为什么认为你需要这里的服务。假设你这样做,你将需要使用常规服务并安排自己的后台线程,这样你可以更好地控制服务和线程的生命周期。
我有一个 IntentService 可以对我的 API 执行后台请求。 我正在使用 Otto Bus 与它通信。
public class MyService extends IntentService {
private MyAPI mApi;
private MyBus mBus;
MyService () {
super("MyService ");
}
@Subscribe
public void onLoadSearchData(LoadSearchDataEvent event) {
Log.d("onLoadSearchData "+ Thread.currentThread().getName());
mApi.loadSomeData();
}
@Override
protected void onHandleIntent(Intent intent) {
Thread.currentThread().setName(getClass().getCanonicalName());
Log.d("Thread name " + Thread.currentThread().getName());
if (mApi==null) mApi = new MyAPI(getApplicationContext());
if (mBus==null) {
mBus = MyBus.getInstance();
mBus.register(this);
}
}
}
onHandleIntent是在副线程上执行的,这很正常。 但是当我用来自主 ui 的总线事件调用 onLoadSearchData 时, 它在 UI 线程 上运行!! !!
我不明白为什么。
我的目的是为 load/cache 数据创建一个后台线程。
不知道该怎么做。感谢您的帮助。
I don't understand why.
By default, all interaction with an instance is confined to the main thread
更具体地说,Otto 在发布消息的同一线程上传送消息。
My purpose is to have a background thread to load/cache data.
IntentService
有一个后台线程,但只调用 onHandleIntent()
。一旦onHandleIntent()
returns,不仅线程消失了,服务也被销毁了。
我不清楚你为什么认为你需要这里的服务。假设你这样做,你将需要使用常规服务并安排自己的后台线程,这样你可以更好地控制服务和线程的生命周期。