根據用戶的請求,讓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