单独的线程调用runOnUiThread的方法

时间:2014-11-24 09:41:01

标签: android threadpool

我有一个带有1个Thread的FixedSizeThreadPool(因为我只需要一个,后面的每个请求应该等到早先的请求完成):

myService = Executors.newFixedThreadPool(1);
    myService.execute(new WorkerRunnable());

在我的WorkerRunnable中我做了一些事情,在中间我从我的Activity中调用了一个方法:

myActivity.thisMethodRunsOnUiThread();

方法如下所示:

public void thisMethodRunsOnUiThread() {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            I'm trying to Change a View here, that's why i Need to do this on Ui Thread
        }

    });
}

然后在WorkerRunnable上出现了我的最后一个方法,它应该再次从fixedSizePool上运行seperateThread

myActivity.thisMethodsRunsonUiThread();
thisMethodRunsAgainOnTheSeperateThread();

但我在这里提到的是他只调用MethodWhichShouldRunOnSeperateThread之后应该RunOnUiThread的方法。(这是最后一个方法,所以我的Thread现在就完成了)。可能是seperateThread作为MainThread获得了更高的优先级,所以他等到seperateThread完成然后他启动了在UiThread上运行的方法吗?

我需要完成方法

myActivity.thisMethodsRunsonUiThread();

在此方法之前

thisMethodRunsAgainOnTheSeperateThread();

有人可以解释为什么他这样做吗?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

参考http://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)

如果当前线程不是UI线程,则该操作将发布到UI线程的事件队列

因此,此runnable必须等待一段时间才能执行

您可以使用wait()notify()/notifyAll() java方法进行线程操作