Android中后台上传的最佳方法

Android中后台上传的最佳方法,android,Android,问题: 我想写一个过程,允许用户使用设备拍照,然后将这些照片上传到云中的某个侦听器。用户不必做任何事情来启动上传,后台侦听器只需监视文件夹,只要找到其中的文件,就会上传并删除它们 两个问题: 1) 如何在用户不再拍照后仍让程序在后台运行(如果他们重新启动设备以唤醒并完成上传,如果还有) 2) 假设连接不稳定(一直如此),如何验证给定图像是否已完成上载,如果未完成,则如何重新提交 我不需要任何代码示例,我只想了解实现此功能的最佳策略 我打算使用ApacheCommons并只上传到PHP,但不确定存

问题:

我想写一个过程,允许用户使用设备拍照,然后将这些照片上传到云中的某个侦听器。用户不必做任何事情来启动上传,后台侦听器只需监视文件夹,只要找到其中的文件,就会上传并删除它们

两个问题: 1) 如何在用户不再拍照后仍让程序在后台运行(如果他们重新启动设备以唤醒并完成上传,如果还有)

2) 假设连接不稳定(一直如此),如何验证给定图像是否已完成上载,如果未完成,则如何重新提交

我不需要任何代码示例,我只想了解实现此功能的最佳策略

我打算使用ApacheCommons并只上传到PHP,但不确定存在哪种类型的错误检查来考虑连接文件


TIA。

基本上在多个平台上多次编写了此应用程序,我可以告诉您,这不是一项微不足道的工作。要解决第一个问题,您可以创建一个位于后台并执行上载的服务。为了让它自动启动,您可以声明它收到清单中已完成的intent android.intent.action.BOOT_(您需要android.permission.RECEIVE_BOOT_COMPLETED权限才能使用该权限)。如果你要听标准相机应用程序写出来的东西,你可以用它来听新东西——小心,手机可以有多个地方存放照片

对于第二个问题,让您的Web服务返回有关上载完成的信息,您的客户端可以使用这些信息来决定重试

我想写一个过程,将 允许用户使用 设备,然后再保存这些照片 已上载到中的某个侦听器 云

请自己开始拍照(这样你就知道什么时候该上传了),或者创建一个
ACTION\u SEND
Activity
插入相机应用程序的共享选项,这样用户就可以上传了

用户不应该这样做 任何启动上传的东西,一个 后台侦听器只需观看 文件夹,只要找到它就可以 它会上传其中的文件,然后 删除它们

请不要


安卓用户的一个主要抱怨是使用这种技术编写的应用程序——一些“后台监听器”占用了内存,99.999%的时间没有提供任何价值。Android核心团队被迫修改操作系统,以防止开发者以这种方式破坏用户的手机。较新版本的Android将在一段时间后终止您的“后台侦听器”。用户可以使用“任务杀手”或“设置”应用程序中的“管理服务”屏幕提前终止您的“后台侦听器”


请自己开始拍照(这样你就知道什么时候该上传了),或者创建一个
操作发送
活动
插入相机应用程序的共享选项,这样用户就可以上传了。

非常有用的建议。。。我可能会给你打勾,但会留一段时间,看看是否有人会插话告诉我可以思考的东西(人们通常在回答问题后会停止关注)。至于文件写入的位置,我打算自己将文件写入SD卡。。。这会带来问题吗?“为了解决第一个问题,您可以创建一个位于后台并执行上载的服务。”——但是,您绝对不希望设计成该服务应该永远存在。使用
IntentService
,以便在后台线程上进行上载(必需),并在没有更多上载时自动关闭服务。使用
startService()
将命令发送到
IntentService
以使其启动上载。是的,对IntentService执行一千次是。如果你自己尝试并管理后台操作,你不会相信有很多方法可以把这样的事情搞砸。如果照片应用程序不再运行怎么办?什么启动了意向服务?我担心的是,在某些情况下,照片应用程序可能已经使用完毕,设备也被扔进了包中,但它仍然必须卸载尚未成功卸载的内容。在使用我在这里提到的ContentObserver技术的商业应用程序中完成了这一操作后,操作系统杀死它并没有问题。请注意,Intent服务将用于上传-您的其他服务会发现照片并将Intent抛出到上传服务,以实际将其推送到服务器。这使得内容观察服务非常轻量级,易于维护,具有简单的生命周期,其服务寿命仅限于上传内容。有几条评论——首先,尽管有文档,但自己拍照实际上并不允许在所有手机上拍摄全分辨率照片。在某些手机上,无论你做什么,它都会让你的图像质量下降。至于后台操作,您绝对需要有一个设置,以便用户可以禁用内容侦听器,否则您(正确地)会收到很多关于它的投诉。@jjb:“在某些手机上,无论您做什么,它都会降低图像质量”--有受影响设备的名册吗?恐怕我无法访问我们在不同型号上制作的笔记,因为我不再在那家公司工作了。我似乎还记得各种各样的英雄变体,以及Eris。有可能Evo 4G就是其中之一——这似乎是SenseUI的问题。有可能是因为我不再积极地工作了