Android保存图片(带一些处理)优化方法

时间:2016-12-07 23:43:31

标签: android android-asynctask android-service foreground-service

我已从相机获取图像,并希望在经过一些约10秒的处理后将其保存到目录中。我尝试了以下方法:

1)Asynctask(问题:如果用户关闭(滑动)应用程序,则会杀死asyncTask)

2)意图服务(问题:与Asynctask相同)

3)前台服务(问题:挂起应用程序的UI)

4)在UI线程上运行(问题:挂起应用程序)。

所以我的问题是我应该使用什么来保存我的图像(通过一些处理),这样即使应用程序关闭且UI没有挂起(冻结),所有任务也都完成了。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您无法阻止Android终止您的进程。如果用户希望它被杀死(例如,使用“强制停止”),它将被杀死。你无能为力。

当用户从最近的任务列表中滑动任务时,不同版本的Android中的行为会有所不同(并且不同的制造商也会有不同的行为)。但是,在大多数情况下,托管您的应用程序(包括任何服务)的操作系统进程都会被杀死。如果应用程序有一个想要重新启动的运行Service,Android将创建一个新的操作系统进程并重新实例化Service并重新启动它。

您可以将Service置于单独的操作系统进程中,从而缓解此问题。为此,请将android:process=":remote"添加到<service>声明中。在某些版本的Android上,从最近的任务列表中滑动任务将终止托管您的活动的操作系统进程,但不会终止托管您Service的操作系统进程。

在任何情况下,您都需要使应用程序健壮,以便它可以处理被杀死和重新启动。

答案 1 :(得分:0)

感谢大家的建议。我最终能够实现这一目标的方法是使用自己创建的前台服务和asynctask来在后台执行工作。我是一个新手,所以不知道它是如何工作的,但它不会导致任何应用程序冻结/滞后,即使应用程序从最近的任务列表中刷过也能完成工作。 (在Android L(5.1.1)和M中测试)