为什么runOnUiThread()在服务中不起作用?

Ang*_*274 5 android android-service

我正在创建一个应用程序,即使应用程序没有运行,也需要每分钟更新一次值.

当然,我已经设置了一个简单的Service方法.我设置了调试消息,告诉我何时Service启动,何时更新(每分钟)以及何时关闭.我还有一条消息告诉我何时在runOnUiThread()方法内更新值.我的所有消息都被激活,除了那个消息runOnUiThread().有什么我做错了(当然有)?我需要改变什么?

码:

@Override
public void handleMessage(Message message) {

    try {

        if (!serviceStarted) {

            serviceStarted = true;
            serviceTest = true;

            while (serviceStarted) {

                new MainActivity().runOnUiThread(new Runnable() {

                    public void run() {

                            OverviewFragment.refresh(getApplicationContext());
                            System.out.println("yay");

                         }
                });

                Thread.sleep(((1 /* minutes */) * 60 * 1000));
                System.out.println("Updated values through service.");

            }
        }


    } catch (InterruptedException e) {

        Thread.currentThread().interrupt();
        e.printStackTrace();

    }

    stopSelf(message.arg1);
}
Run Code Online (Sandbox Code Playgroud)

小智 11

所以没有必要这样做,除非你在里面创建一个Thread

Gabe Sechan的回答是正确的.

但是,如果您使用单独的线程,而不是遵循代码:

new MainActivity().runOnUiThread(new Runnable() {
       public void run() {
            OverviewFragment.refresh(getApplicationContext());
                 System.out.println("yay");

       }
});
Run Code Online (Sandbox Code Playgroud)

试试,这段代码:

new Handler(Looper.getMainLooper()).post(new Runnable() {
       public void run() {
            OverviewFragment.refresh(getApplicationContext());
                 System.out.println("yay");
       }
});
Run Code Online (Sandbox Code Playgroud)

根据Android文档

警告:服务在其托管进程的主线程中运行 - 该服务不会创建自己的线程,也不会在单独的进程中运行(除非您另行指定).