Problem Description
I have created a native module that has some code in an
onStart()
method - when importing this module in my alloy controller using
require()
, the
onStart()
method is called when the root activity is started when using Titanium SDK 3.2.3.GA, but when using 3.3.0, it is never called.
I have properly declared the module in my
tiapp.xml
and my
onStart()
method is pretty simple:
{noformat}
@Override
public void onStart(Activity activity)
{
// This method is called when the module is loaded and the root context is started
Log.d(TAG, "[MODULE LIFECYCLE EVENT] start");
super.onStart(activity);
}
{noformat}
In 3.2.3.GA I see the debug message in the
logcat
output - but using 3.3.0.GA I never see it (however I do see the
onPause
and
onStop
lifecycle methods are properly called.
My native module depends on some initialization code in
onStart
that cannot be moved to
onAppCreate
, so it's currently failing as
onStart
is never called (nor is
onPause
which is a bit suspect).
Also, for a non-Alloy app, this does not happen -- all of the lifecycle methods, including
onStart
are called as expected.
Steps to reproduce.
1. Download the module from this [link](
https://github.com/jamesfalkner/liferay-android-beacons/blob/master/dist/com.liferay.beacons-android-0.1.zip)
2. Create a titanium classic project
3. Paste this code:
var win = Ti.UI.createWindow({
backgroundColor:'white'
});
var label = Ti.UI.createLabel();
win.add(label);
win.open();
if (Ti.Platform.name == "android") {
var mod = require('com.liferay.beacons');
label.text = "module is => " + mod + "and checkAvailability says: " + mod.checkAvailability();
} else {
label.text = "liferay.beacons not supported on " + Ti.Platform.name;
}
Steps to reproduce the issue with alloy (which is easier to reproduce)
1. Create a new alloy project
2. Paste this to index.js:
var mod = require('com.liferay.beacons');
$.label.text= "module is => " + mod + "and checkAvailability says: " + mod.checkAvailability();
function doClick(e) {
alert($.label.text);
}
$.index.open();
3. Run it in a device.
Hello, just to summarize (and correct me if I'm wrong): The onStart works: 3.2.3+Classic - OK 3.2.3+Alloy - OK 3.3.0+Classic - OK 3.3.0+Alloy - FAIL. Do you agree? Best Regards
Yep, that's right :)
We've observed the same thing with "Classic" projects and 3.3.0 - it depends on the complexity of app.js, which modules are loaded, etc. If I take one of our apps, and strip it down to the basics, I can get the onStart event. If I add everything back plus modules, I don't.
Likewise with onCreate if you're looking for that event. Used to get it in 3.2.x SDK, not in 3.3.0.
To create a module that hooks to the lifecycle, take a look at here: https://github.com/appcelerator-modules/ti.facebook/blob/master/android/src/facebook/ActivityWorkerProxy.java And create the proxy as mentioned
Hopefully this no longer is an issue and I'll close this as resolved. If this is still posing a problem, do comment.
Can confirm that this was done.