在Android Asynctask中实现POSA的半同步半Asyncc模式

时间:2013-11-14 11:14:28

标签: android design-patterns android-asynctask

请参阅以下代码,该代码取自Android的Asynctask。我认为它是面向模式的软件架构书中并发模式的半同步半异步模式的一个例子。有人可以确认吗?

private static class SerialExecutor implements Executor {    
    final ArrayDeque<Runnable> mTasks = new ArrayDeque<Runnable>();        
    Runnable mActive;        

    public synchronized void execute(final Runnable r) {        
        mTasks.offer(new Runnable() {        
            public void run() {        
                try {        
                    r.run();        
                } finally {        
                    scheduleNext();
                }        
            }
        });

        if (mActive == null) {        
            scheduleNext();
        }        
    }        

    protected synchronized void scheduleNext() {        
        if ((mActive = mTasks.poll()) != null) {        
            THREAD_POOL_EXECUTOR.execute(mActive);        
        }
    }    
}

1 个答案:

答案 0 :(得分:2)

所以是的,我可以确认这是真的。

另外,我个人与POSA2作者之一Doug Schmidt(我的博士顾问)进行过个人讨论,只是为了100%肯定(并且给你更多信心)。他给了我一个视频链接,他在其中深入讨论了这个主题。

这是他在范德比尔特大学教授的一门课程,其中涵盖了使用Android作为示例OS /平台的高级操作原理(例如并发)。

http://www.youtube.com/watch?v=XZ29DAcmcLE

此外,过去已经介绍过这个主题,并将在Coursera上重复出现的POSA课程中再次讨论。这也讨论了软件模式,并在Android框架中显示它们。

https://www.coursera.org/course/posa