Каков наилучший способ позволить Android-приложениям загружать потенциально большой файл на сервер по запросу пользователя?Загрузка файлов в службу Android
В настоящее время я использую IntentService
, в котором я звоню startForeground
и периодически обновляю процесс уведомления, но служба беспорядочно убивается системой примерно через минуту.
Вот соответствующий код из 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)
}
}
Возможно, вы разместите код для этой услуги. Кроме того, имейте в виду, что «IntentService» имеет свой собственный фоновый поток (так что не вилки свои) и что он не поддерживает пробуждение устройства (см. Мой 'WakefulIntentService' для того, кто это делает). – CommonsWare
Я добавил код 'onHandleIntent'. Есть идеи? Должен ли я помещать службу в отдельный процесс, или это нормально, чтобы он оставался в том же процессе, что и активность, которая начала его? –
«Любые идеи?» - Ну, это не код Java, поэтому я не уверен, что вы там делаете. «Должен ли я помещать службу в отдельный процесс, или это нормально, чтобы он оставался в том же процессе, что и активность, которая начала его?» - иметь его в том же процессе должно быть хорошо. – CommonsWare