Awesome
DEPRECATED
This project is now deprecated and superseded by:
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.
<img src="https://github.com/doridori/Dynamo/blob/master/gfx/DynamoDroid.png" alt="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
" (orFragment
) 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
- Well documented
- Easy to jump into without a large ramp-up time
- 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:
- Relatively accessible for those newer to the Android world
- Lightweight and easy to understand
- Explains how it solves common issues and provides examples for these cases.
- 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.