我知道我可以使用Activity's
在runOnUiThread()
UI线程上运行代码。如果我认为Service
是没有用户界面的活动,我将如何在Service
的事件队列中运行代码?
此事件队列是否存在?我知道Service
不是一个线程,但如果我开始一个额外的线程并希望在Service
中运行事件怎么办?我知道正在运行,因为接收到广播,我可以使用Handler
。
例如,在以下代码中:
class MyService extends Service {
public doStuff = new Runnable() {
@Override
public void run() {
// what to put here, to run code on the calling thread?
}
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
Thread t = new Thread(doStuff);
t.start();
return Service.START_STICKY;
}
}
答案 0 :(得分:1)
当Service
在与Activity
(主线程)相同的线程上运行时,您可以在Handler
中创建onCreate
(或者在主线程中的任何位置)并将runnables发布到它:
new Handler().post(new Runnable(){....})
基本上这意味着Activity
和Service
共享同一个事件队列。您的应用程序组件(Activity
,Service
,BroadcastReceiver
,ContentProvider
)都不会在除main之外的任何其他线程上接收生命周期事件。