在服务事件队列上运行代码

时间:2014-12-04 15:09:02

标签: android service

我知道我可以使用Activity'srunOnUiThread() 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;
    }
}

1 个答案:

答案 0 :(得分:1)

Service在与Activity(主线程)相同的线程上运行时,您可以在Handler中创建onCreate(或者在主线程中的任何位置)并将runnables发布到它:

new Handler().post(new Runnable(){....})

基本上这意味着ActivityService共享同一个事件队列。您的应用程序组件(ActivityServiceBroadcastReceiverContentProvider)都不会在除main之外的任何其他线程上接收生命周期事件。