...
Code Block | ||
---|---|---|
| ||
/** * Importing SpringMobile */ import de.spring.mobile.SpringMobile; /** * Generating SpringMobile entity with site id and * application name */ SpringMobile spring = new SpringMobile("<site>", "Application Name", getApplicationContext()); /** * Sending the start of the application to the measurement system */ Map<String, Object> map = new HashMap<String, Object>(); map.put(SpringMobile.VAR_ACTION, SpringMobile.APP_STARTED); spring.commit(map); /* * Sending the action spring.BACKGROUND */ Map<String, Object> map = new HashMap<String, Object>(); map.put(SpringMobile.VAR_ACTION, SpringMobile.APP_BACKGROUND); spring.commit(map); |
Managing Lifecycle Events in Android Apps
A helper class for the Activities can be used instead of SpringMobil.
Link: http://developer.android.com/reference/android/app/Activity.html
Code Block |
---|
Example Activity:
import android.app.Activity;
import android.os.Bundle;
public class TestActivity extends Activity {
private SpringMobileHelper springHelper;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); springHelper = SpringMobileHelper.getInstance(getApplicationContext()); }
@Override
protected void onStart() { super.onStart(); springHelper.start(); }
@Override
protected void onResume() { super.onResume(); springHelper.resume(); }
@Override
protected void onPause() { super.onPause(); springHelper.pause(); }
@Override
protected void onDestroy() { super.onDestroy(); springHelper.destroy(); }
}
Helper Class:
import java.lang.Thread.State;
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import de.spring.mobile.SpringMobile;
/**
This class will help to manage more than one Activity. The Class holds the SpringMobile object and managed the events to it.
*/
public class SpringMobileHelper {
private static SpringMobileHelper singelton = null;
private SpringMobile spring = null;
private boolean isStarted = false;
private int foregroundCounter = 0;
private final Thread sendBackground = new Thread() {
@Override
public void run() {
super.run();
while(true) {
synchronized(sendBackground) {
try { wait(); } catch (InterruptedException e) { continue; }
try { sleep(1000); Map<String, Object> map = new HashMap<String, Object>(); map.put(SpringMobile.VAR_ACTION, SpringMobile.APP_BACKGROUND); spring.commit(map); } catch (InterruptedException e) {}
}
}
}
};
{sendBackground.start();}
private SpringMobileHelper() {
}
/**
*
@param the context
@return SpringMobileHelper
*/
public static SpringMobileHelper getInstance(Context context)
Unknown macro: { if(singelton == null) { singelton = new SpringMobileHelper(); singelton.spring = new SpringMobile("app", "MoreActivities", context); } return singelton; }
/**
call by start of activity
*/
public void start()
Unknown macro: { if(!isStarted) { isStarted = true; Map<String, Object> map = new HashMap<String, Object>(); spring.commit(map); } }
/**
call by resume of activity
*/
public void resume()
Unknown macro: { foregroundCounter++; if(sendBackground != null && sendBackground.getState() != State.WAITING) { sendBackground.interrupt(); } else { Map<String, Object> map = new HashMap<String, Object>(); map.put(SpringMobile.VAR_ACTION, SpringMobile.APP_FOREGROUND); spring.commit(map); }
}
/**
* call by pause of activity
*/
public void pause() {
foregroundCounter--;
if(sendBackground != null && sendBackground.getState() != State.WAITING) { sendBackground.interrupt(); } }
synchronized(sendBackground) { sendBackground.notify(); }
}
/**
call by destroy of activity
*/
public void destroy() {
if(foregroundCounter == 0) {
try { sendBackground.join(1000); Map<String, Object> map = new HashMap<String, Object>(); map.put(SpringMobile.VAR_ACTION, SpringMobile.APP_CLOSED); spring.commit(map); } catch (InterruptedException e) {}
}
}
} |
Example: Implementation of an app page request via the action variable (ac)
...