Here, I'd like to talk about how I implemented this simple widget. Before I go too far, you probably need to take a look at least these two topics,
Just as I said before, there are some limitations in App Widget design and understand these should save you some time.
Basically, the Launcher process hosts AppWidgetHostView for each App Widget and talk with your process through RPC calls. You can image there are many RPC (binder) calls between Launcher and your process. That's why you will use RemoteViews to package your update actions in your process and apply them on the App Widget on the Launcher side. In fact, the RemoteViews is implemented as Command pattern in software terminology.
Now, you can imagine why AppWidget design is so restricted.