A lightweight state-based controller for Android
Java
Latest commit 04f07d6 Nov 27, 2015 @doridori Update README.md
Permalink
Failed to load latest commit information.
Dynamo Example rename May 14, 2015
Dynamo add dryrun Jul 24, 2015
gfx img Apr 3, 2015
gradle/wrapper gradle wrapper May 6, 2015
.gitignore readme & git ignore May 6, 2015
CHANGELOG.md changelog May 6, 2015
README.md Update README.md Nov 27, 2015
circle.yml circle config Jul 13, 2015
gradlew gradle wrapper May 6, 2015
gradlew.bat gradle wrapper May 6, 2015

README.md

Android Arsenal Circle CI

DEPRECATED

This project is now deprecated and superseded by:

  • Pilot for Android app architecture
  • Engine for a lightweight Finite State Machine

Dynamo

An extremely lightweight collection of classes for implementing a state based decoupled controller architecture for Android applications.

A major benefit of this is that it also keeps asynchronous code away from the Android lifecycle.

dynamo droid

Motivation

The majority of Android apps have no standard approach to architecture. Its very rare to come across an apps codebase that says "I have used approach X listed here". Most apps I have found fall into the below camps

  • The "God-Activity" (or Fragment) that does everything and has to balance asynchronous code with the Android lifecycle.
  • A roll your own approach which still does not address all the issues associated with mixing asynchronous code and lifecycle events, which causes it to break down in some common use-cases.

There are some great libraries out there, its just that I have not come across one which is

  1. Well documented
  2. Easy to jump into without a large ramp-up time
  3. Solves the issues that come from the "default" approaches (see the projects Wiki for more here)

Similarly, there are many great blog posts at present which cover a subset of an MV* (i.e. MVP) approach but most of the ones I have read leave me with as many questions as I have answers, do not form a complete road-map and sometimes introduce unneeded complexities or limitations. This is my attempt to create something that is a:

  1. Relatively accessible for those newer to the Android world
  2. Lightweight and easy to understand
  3. Explains how it solves common issues and provides examples for these cases.
  4. Easy to write automated tests against

Blog Posts

The motivation for this lib is further outlined in two of my blog posts:

Wiki

The Wiki for this repo contains documentation about how to use this library. Check it out.

Questions / Feedback

Admittedly, while trying to create a clear guide for people here I have probably created more confusion than you had to start with. If you have any questions, suggestions, abuse, lavish amounts of money or anything else you want to send my way please do. Use the Issues in this repo, twitter, the comments in my blog, the reddit posts, anything! At the end of the day I want to help you learn and learn myself so please feel free. Plus, if you think I have not explained something enough or have the wrong idea about something I want to hear it!

Download

jcenter/mvn coming after this short intermission

For now can just grab the latest release i know i know

Or to play with via Maven Local by cloning the repo and running ./gradlew pTML and then adding mavenLocal() to your resositories{...} and compile 'couk.doridori.dynamo:dynamo:1.0.0'

License

Copyright 2014 Dorian Cussen

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.