What is the best way of letting an Android app upload a potentially large file to a server at a request from the user?
I'm currently using an IntentService, in which I call startForeground and update the notification progress periodically, but the service randomly gets killed by the system after about a minute or so.
Here is the relevant code from onHandleIntent :
class BeamService extends IntentService("SSH Beam") {
  override def onHandleIntent(intent: Intent) = {
    ...
    // Start the notification
    startForeground(0,
      builder
      .setTicker("Starting transfer")
      .setContentTitle(filename)
      .setContentText("Starting transfer")
      .setOngoing(true).build
    )
    // Create the session and the monitor
    val session = server.createSession(auth)
    implicit val monitor = Monitor(filename, size)
    // Send the file
    try {
      session.connect
      session.cd(destination)
      session.put(filename, is)
    } catch {
      case e: Throwable => {
        notificationManager.notify(0,
          builder.setProgress(0, 0, false)
                 .setTicker("Transfer failed")
                 .setContentText(e.getMessage)
                 .build
        )
        e.printStackTrace
      }
    } finally {
      session.disconnect
      is.close
    }
    stopForeground(false)
  }
}
 
     
    