-
Notifications
You must be signed in to change notification settings - Fork 576
Hyperlinks in the lectures
Openweb edited this page Apr 8, 2015
·
11 revisions
Prof Douglas C. Schmidt: http://www.dre.vanderbilt.edu/~schmidt/DigitalLearning/ Android Source code: http://source.android.com
Google IO video: Anatomy and physiology of Android: https://youtu.be/G-36noTCaiA
-
Also at: https://sites.google.com/site/io/anatomy--physiology-of-an-android
-
Watch lectures carefully and multiple times. Patterns and frames provided by Android.
Books:
-
OS Books: http://os-book.com
-
Concurrent programming in Java book: http://gee.cs.oswego.edu/dl/cpj/
-
POSA books: http://www.dre.vanderbilt.edu/~schmidt/POSA/
Lectures in Youtube:
- Lecture 1: https://youtu.be/8CEURXnHp5A
- Lecture 2: https://youtu.be/tsW3j3ljkxw
- Lecture 3: https://youtu.be/PViMEUeQXRk
- Lecture 4: https://youtu.be/PnzB5Frvqf8
- Lecture 5: https://youtu.be/B_Ph_l6ujv0
Why Concurrency:
- Simplify program structure
- Increase performance
- Improve responsiveness of apps
Course Overview:
- FAQs: https://github.com/douglascraigschmidt/POSA-15/wiki/POSA-15-FAQ
- Full Stack developer: http://www.laurencegellert.com/2012/08/what-is-a-full-stack-developer
- Event driven programming: http://en.wikipedia.org/wiki/Event-driven_programming
- AsyncTask: http://developer.android.com/reference/android/os/AsyncTask.html
- Design Patterns: http://en.wikipedia.org/wiki/Design_Patterns
- Active Object: http://en.wikipedia.org/wiki/Active_object
- Reator model: http://www.dre.vanderbilt.edu/~schmidt/PDF/Reactor.pdf
- Concurrency patterns : http://en.wikipedia.org/wiki/Concurrency_pattern
- Half sync half async: http://www.dre.vanderbilt.edu/~schmidt/PDF/HS-HA.pdf
- Multithreading computer architecture: http://en.wikipedia.org/wiki/Multithreading_(computer_architecture)
- Worker threads: http://developer.android.com/guide/components/processes-and-threads.html
- OO Programming: http://en.wikipedia.org/wiki/Object-oriented_programming
- OO Design: https://en.wikipedia.org/wiki/Object-oriented_design
- UML: http://en.wikipedia.org/wiki/Unified_Modeling_Language
- Java PL: http://en.wikipedia.org/wiki/Java_(programming_language)
- Up-to Eleven: maximize performance: http://en.wikipedia.org/wiki/Up_to_eleven
- Responsiveness: http://en.wikipedia.org/wiki/Responsiveness
- RenderScript Framework: CPU, GPU and DSPs: http://developer.android.com/guide/topics/renderscript/compute.html
- Quad core phones: http://www.androidauthority.com/tag/quad-core-phones/
- Pearson Live lessons: http://www.dre.vanderbilt.edu/~schmidt/LiveLessons
- Overview of Android Architecture: http://www.techotopia.com/index.php/An_Overview_of_the_Android_Architecture
- Layered Android Architecture: http://posa1.blogspot.com/2008/05/layered-architecture-pattern.html
- Android Operating system: http://en.wikipedia.org/wiki/Android_(operating_system)
- UNIX architecture: http://en.wikipedia.org/wiki/Unix_architecture
- Virtual Memory: http://en.wikipedia.org/wiki/Virtual_memory
- Process computing: http://en.wikipedia.org/wiki/Process_(computing)
- Thread computing: http://en.wikipedia.org/wiki/Thread_(computing)
- Parallel computing: http://en.wikipedia.org/wiki/Parallel_computing
- Internet Protocol: http://en.wikipedia.org/wiki/Internet_protocol_suite
- Device Driver: http://en.wikipedia.org/wiki/Device_driver
- Android binder: http://elinux.org/Android_Binder
- Android Kernel Feature Ashmem: http://elinux.org/Android_Kernel_Features#ashmem
- Android power management: http://elinux.org/Android_Power_Management
- Android OOM Handling: http://elinux.org/Android_Kernel_Features#oom_handling
- HAL 9000: http://en.wikipedia.org/wiki/HAL_9000
- Android HAL (Hardware Abstraction Layer): http://www.dre.vanderbilt.edu/~schmidt/PDF/Android-HAL.pdf
- GNU Public license: http://en.wikipedia.org/wiki/GNU_General_Public_License
- Process Virtual Machines: http://en.wikipedia.org/wiki/Virtual_machine#Process_virtual_machines
- Dalvik VM internals: https://sites.google.com/site/io/dalvik-vm-internals
- Just In time compilation: http://en.wikipedia.org/wiki/Just-in-time_compilation
- ART Runtime: https://youtu.be/EBlTzQsUoOw
- ART and Dalvik: https://source.android.com/devices/tech/dalvik/index.html
- Live lessons on Java Concurrency: http://www.dre.vanderbilt.edu/~schmidt/LiveLessons/CPiJava/
- Java and Android API Comparison: http://en.wikipedia.org/wiki/Comparison_of_Java_and_Android_API
- Android Architecture: http://www.makelinux.net/android/classes/
- Background processing: http://www.vogella.com/tutorials/AndroidBackgroundProcessing/article.html
- Services: http://developer.android.com/guide/components/services.html
- Android source: https://source.android.com
- JNI (Java Native Interface) tips: http://developer.android.com/training/articles/perf-jni.html
- Android NDK (Native Dev Kit): https://developer.android.com/tools/sdk/ndk/index.html
Concurrency Challenges:
-
Accidental complexity: tools, use of C libraries, low level API (non POSIX threads in C UNIX)
-
Inherent complexity: deadlock, scheduling, synchronization
-
Wiki old school debugging: http://en.wikipedia.org/wiki/Trepanning
-
Heisenbug: http://en.wikipedia.org/wiki/Heisenbug
-
Multithreaded debugging techniques: http://www.drdobbs.com/cpp/multithreaded-debugging-techniques/199200938
-
Race condition: http://en.wikipedia.org/wiki/Race_condition
-
Dynamic analysis and debugging: http://www.dre.vanderbilt.edu/~schmidt/PDF/DSIS.pdf
-
Synchronization: http://en.wikipedia.org/wiki/Synchronization_(computer_science)
-
Deadlock: http://en.wikipedia.org/wiki/Deadlock
-
No Silver Bullet: http://en.wikipedia.org/wiki/No_Silver_Bullet
-
No Silver Bullet paper: http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf
-
Networked architecture: http://www.dre.vanderbilt.edu/~schmidt/PDF/BC-schmidt.pdf
Overview of patterns and frameworks:
- Android Application Framework: https://sites.google.com/site/io/inside-the-android-application-framework
- Reasoning about software quality scenarios: http://www.sei.cmu.edu/architecture/start/reasoning.cfm
- Observer pattern: http://en.wikipedia.org/wiki/Observer_pattern
- Bus factor: http://en.wikipedia.org/wiki/Bus_factor
- What is Reify: http://en.wikipedia.org/wiki/Reification
- OO App Frameworks: http://www.dre.vanderbilt.edu/~schmidt/CACM-frameworks.html
- OO Frameworks: http://www.dre.vanderbilt.edu/~schmidt/frameworks.html
- Hollywood Principle: http://www.dre.vanderbilt.edu/~schmidt/Coursera/articles/hollywood-principle.txt
- Observer Pattern in Android Frameworks:
-
content provider and resolver framework: http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/
-
Intents frameworks: http://developer.android.com/guide/components/intents-filters.html
-
Software Reuse: http://martin.griss.com/pubs/fusion1.htm
-
Fundamental concepts of software reuse: http://www.peachpit.com/articles/article.aspx?p=29753&seqNum=4
Other patterns in Android:
- Monitor object pattern: http://www.dre.vanderbilt.edu/~schmidt/PDF/monitor.pdf
- Thread specific storage pattern: http://www.dre.vanderbilt.edu/~schmidt/PDF/TSS-pattern.pdf
- Command Processor: http://www.dre.vanderbilt.edu/~schmidt/PDF/CommandProcessor.pdf
- Command Processor pattern revisited: http://kircher-schwanninger.de/michael/publications/CommandRevisited.pdf
- Active object pattern: http://www.dre.vanderbilt.edu/~schmidt/PDF/Act-Obj.pdf
- Broker: http://www.kircher-schwanninger.de/michael/publications/BrokerRevisited.pdf
- Template method pattern: http://en.wikipedia.org/wiki/Template_method_pattern
- Strategy pattern: http://en.wikipedia.org/wiki/Strategy_pattern
- Factory Method pattern: http://en.wikipedia.org/wiki/Factory_method_pattern
- Closure: http://en.wikipedia.org/wiki/Closure_(computer_programming)
- Creation Pattern: http://en.wikipedia.org/wiki/Creational_pattern
- Proactor pattern: http://en.wikipedia.org/wiki/Proactor_pattern
- Pooling pattern: http://kircher-schwanninger.de/michael/publications/Pooling.pdf
Threads:
- Java Thread: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
- Java Defining and running a thread: http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html
- Android Thread: http://developer.android.com/reference/java/lang/Thread.html
- Standard Java Concurrency: http://docs.oracle.com/javase/tutorial/essential/concurrency/
- Android Currency: http://developer.android.com/reference/java/util/concurrent/package-summary.html
- Android Processes and threads: http://developer.android.com/guide/components/processes-and-threads.html
- Communicate with UI Thread: https://developer.android.com/training/multiple-threads/communicate-ui.html
- Java Thread states: http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.State.html
- Java 6 thread states: http://www.uml-diagrams.org/examples/java-6-thread-state-machine-diagram-example.html
- Sound of music lyrics: http://www.songlyrics.com/sound-of-music/do-re-mi-lyrics/
- Sound of music lyrics: http://www.songlyrics.com/sound-of-music/so-long-farewell-lyrics/
- Fantasia things are hard to stop: https://www.youtube.com/watch?v=5rzyuY8-Ao8
- Alternative ART (Android Run Time) and Dalvik: http://source.android.com/devices/tech/dalvik/index.html
- Stopping java thread: http://docs.oracle.com/javase/7/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html
- Volatile java programming: http://en.wikipedia.org/wiki/Volatile_(computer_programming)#In_Java
- Interrupting java threads: http://developer.android.com/reference/java/lang/Thread.html#interrupt()
- Wiki Interrupt: http://en.wikipedia.org/wiki/Interrupt
- IBM Java dealing with interrupted execution: http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html?ca=drs-
- Stopping java thread: http://stackoverflow.com/questions/8505707/android-best-and-safe-way-to-stop-thread
- Wiki Dalvik VM: http://en.wikipedia.org/wiki/Dalvik_(software)
- Monitor synchronization: http://en.wikipedia.org/wiki/Monitor_(synchronization)
- Java synchronization methods: http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
- Busy waiting: http://en.wikipedia.org/wiki/Busy_waiting
- Thread synchronization: http://www.artima.com/insidejvm/ed2/threadsynch.html
- Monitor object: http://www.dre.vanderbilt.edu/~schmidt/PDF/monitor.pdf
- Synchronization methods: http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html
- Intrinsic locks: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
- Mutex: https://computing.llnl.gov/tutorials/pthreads/#Mutexes
- Condition variables: https://computing.llnl.gov/tutorials/pthreads/#ConditionVariables
- Implicit condition variables: http://en.wikipedia.org/wiki/Monitor_(synchronization)#Implicit_condition_variable_monitors
- Guarded suspension: http://en.wikipedia.org/wiki/Guarded_suspension
- Guarded blocks: http://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
- Lock synchronization: http://docs.oracle.com/javase/tutorial/essential/concurrency/locksync.html
- Nested lockouts: http://www.dre.vanderbilt.edu/~schmidt/C++2Java.html#concurrency
- Java notify: http://stackoverflow.com/questions/37026/java-notify-vs-notifyall-all-over-again
- a notation paper: http://www.dre.vanderbilt.edu/~schmidt/PDF/specific-notification.pdf
- Java concurrent utility package: http://developer.android.com/reference/java/util/concurrent/package-summary.html
- Processes and threads: http://developer.android.com/guide/components/processes-and-threads.html#threads
Code examples:
- User or Daemon: https://github.com/douglascraigschmidt/LiveLessons/tree/master/UserOrDaemonThread
- User or Daemon Runnable: https://github.com/douglascraigschmidt/LiveLessons/tree/master/UserOrDaemonRunnable
- User or Daemon Executor: https://github.com/douglascraigschmidt/LiveLessons/tree/master/UserOrDaemonExecutor
- Thread Join: https://github.com/douglascraigschmidt/LiveLessons/tree/master/ThreadJoinTest
HaMeR Framework:
- Where does message pool reside in memory: http://stackoverflow.com/questions/21730247/what-is-global-message-pool-in-android-where-does-it-reside-in-memory
Week2 Links:
- Activity: http://developer.android.com/reference/android/app/Activity.html
- Blog Painless Threading: http://android-developers.blogspot.com/2009/05/painless-threading.html
- Android HaMeR framework: https://developer.android.com/training/multiple-threads/communicate-ui.html
- AsyncTask Framework: http://developer.android.com/reference/android/os/AsyncTask.html
- Understanding processes and Threads: http://codetheory.in/android-handlers-runnables-loopers-messagequeue-handlerthread/
Elements of concurrency Framework:
- Looper: http://developer.android.com/reference/android/os/Looper.html
- Message queue: http://developer.android.com/reference/android/os/MessageQueue.html
- Message: http://developer.android.com/reference/android/os/Message.html
- Handler: http://developer.android.com/reference/android/os/Handler.html
- Thread: http://developer.android.com/reference/java/lang/Thread.html
- Active Object Command Processor Pattern: Link did not work
- Runnable: http://developer.android.com/reference/java/lang/Runnable.html
- Future Task: http://developer.android.com/reference/java/util/concurrent/FutureTask.html
- Executor: http://developer.android.com/reference/java/util/concurrent/Executor.html
- Leaking a context: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
- Event Loop: http://en.wikipedia.org/wiki/Event_loop
- Thread Local: http://developer.android.com/reference/java/lang/ThreadLocal.html
- Handlers: http://developer.android.com/reference/android/os/Handler.html
- Handler Thread: http://developer.android.com/reference/android/os/HandlerThread.html
- Android Looper, Handler, HandlerThread: http://blog.nikitaog.me/2014/10/18/android-looper-handler-handlerthread-ii/
- Handler Callback Interface: http://developer.android.com/reference/android/os/Handler.Callback.html
- Intent Service: http://developer.android.com/reference/android/app/IntentService.html
- Handler Message Recycle: https://groups.google.com/forum/#!topic/android-developers/9pHuc7lGunY
- Lab assignment 2 memory leaks: http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
- App Resources: http://developer.android.com/guide/topics/resources/index.html
- Manifest Intro: http://developer.android.com/guide/topics/manifest/manifest-intro.html
- Countdown timer: http://developer.android.com/reference/android/os/CountDownTimer.html