For point 2, we usually maintain the session of the application using rhoconfig.txt, a variable to store the last viewed page and last accessed data in sqliteDB. When the application opens again (from crash), we first check those existing data's and then take the user to the next step.
After some extensive investigations, we have found that we can create a timed event using a native extension that extends the BroadcastReceiver class.
The AlarmManager class can then be used to schedule a periodic Intent to the class which can then contact the server (to maintain pings).
The scheduled event occurs even if the main application has been closed so this then maintains the required activity through the normal Android operation.