Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 分离线程,该线程调用一个运行UIThread的方法_Android_Threadpool - Fatal编程技术网

Android 分离线程,该线程调用一个运行UIThread的方法

Android 分离线程,该线程调用一个运行UIThread的方法,android,threadpool,Android,Threadpool,我得到了一个具有1个线程的FixedSizeThreadPool,因为我只需要一个线程,并且以下每个请求都应该等到前面的请求完成: myService = Executors.newFixedThreadPool(1); myService.execute(new WorkerRunnable()); 在我的工作中,我做了一些事情,在中间,我从我的活动中调用一个方法: myActivity.thisMethodRunsOnUiThread(); 方法如下所示: public void

我得到了一个具有1个线程的FixedSizeThreadPool,因为我只需要一个线程,并且以下每个请求都应该等到前面的请求完成:

myService = Executors.newFixedThreadPool(1);
    myService.execute(new WorkerRunnable());
在我的工作中,我做了一些事情,在中间,我从我的活动中调用一个方法:

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的单独线程上运行

myActivity.thisMethodsRunsonUiThread();
thisMethodRunsAgainOnTheSeperateThread();
但是我在这里提到的是,他只调用应该在应该运行UnperateThread的方法之后运行UnuithRead的方法。这是最后一个方法,所以我的线程将在此时完成。可能是分离线程作为主线程获得了更高的优先级,因此他等待分离线程完成,然后启动在UiThread上运行的方法

我需要完成这个方法

myActivity.thisMethodsRunsonUiThread();
在此方法之前

thisMethodRunsAgainOnTheSeperateThread();
有人能解释他为什么那样做吗?非常感谢您的帮助。

请参阅

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

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


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

您能提供一些代码来更好地理解吗?因为您说过runnable必须等待一段时间才能执行。在这种情况下不是这样的。我还声明了一个静态布尔变量,如果UIThread方法完成,该变量将切换为true。我在while循环中的单独线程上打包了这个方法,并询问布尔值是否设置为true。但是while循环无休止地运行,UIMethod永远不会被调用,因为separateThread永远不会完成。我希望你能理解。也许我弄错了什么…你能提供你的代码吗:你没有提到你的静态布尔标志,奇怪的是你在IThread上发布的方法没有被执行。别误会,我不想公开我的代码。此外,这会使问题变得过重。。我认为描述这个问题最好的方法就是我上面所说的方法。。我认为这并不奇怪,一定有一个合乎逻辑的答案。。是的,我想现在正是提供这些信息的时候。还有其他建议吗?我唯一的想法是,在轮换过程中,你泄露了你的活动对象MacActivity,你试图将你的runnable发布到并更改已经被破坏的视图。但如果没有代码,我无法确定你的意思是,如果我将设备从纵向旋转到横向,或者从横向旋转到纵向?不,我不会那样做。。但无论如何,谢谢你的时间和帮助。希望有人能帮助我/