Over 10 years of community discussion and knowledge are maintained here as a read-only archive.
package com.britton.puremvcboilerplate;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.util.AttributeSet;import android.view.View;public class HomeActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ApplicationFacade facade = ApplicationFacade.getInstance(); facade.startup(this); }}
package com.britton.puremvcboilerplate;import org.puremvc.java.patterns.facade.Facade;import android.app.Activity;import com.britton.puremvcboilerplate.controller.SayHelloCommand;import com.britton.puremvcboilerplate.controller.StartupCommand;public class ApplicationFacade extends Facade { /** * Key of this facade. */ public static final String NAME = "ApplicationFacade"; /** * Unique instance. */ private static ApplicationFacade instance = null; public static final String STARTUP = "startup"; public static final String PREP_MODEL = "prep_model"; public static final String PREP_VIEW = "prep_view"; public static final String SAY_HELLO = "say_hello"; public static final String SAID_HELLO = "said_hello"; protected ApplicationFacade() { super(); } public static ApplicationFacade getInstance() { if (instance == null) { instance = new ApplicationFacade(); } return instance; } public void startup(Activity app) { sendNotification(STARTUP,app); } /* (non-Javadoc) * @see org.puremvc.java.patterns.facade.Facade#initializeController() */ @Override protected void initializeController() { registerCommand(STARTUP, new StartupCommand()); registerCommand(SAY_HELLO, new SayHelloCommand()); super.initializeController(); }}
Thread [<1> main] (Suspended (exception RuntimeException)) ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2663 ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2679 ActivityThread.access$2300(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 125 ActivityThread$H.handleMessage(Message) line: 2033 ActivityThread$H(Handler).dispatchMessage(Message) line: 99 Looper.loop() line: 123 ActivityThread.main(String[]) line: 4627 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method] Method.invoke(Object, Object...) line: 521 ZygoteInit$MethodAndArgsCaller.run() line: 868 ZygoteInit.main(String[]) line: 626 NativeStart.main(String[]) line: not available [native method]
One intial problem to solve, one I ran into with the Flex hero SDK as well: when an Activity closes, its Mediator should be removed. Same goes for starting an Activity. This is a best practice anyway, but in the case of mobile development it's mandatory.
/** * Called (or not called) when the activity is destroyed by the Android * system. */ @Override public void onDestroy() { super.onDestroy(); ActivityFacade.removeCore( ActivityNames.MyActivityName); }