1

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

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

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

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

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

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

任何帮助,将不胜感激。

4

2 回答 2

2

您无法阻止 Android 终止您的进程。如果用户想要杀死它(例如,使用“强制停止”),它将被杀死。您无法采取任何措施来防止这种情况发生。

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

Service您可以通过将您放在单独的操作系统进程中来缓解这一点。为此,请添加android:process=":remote"<service>声明中。在某些版本的 Android 上,从最近的任务列表中滑动任务将杀死托管您的活动的操作系统进程,但不会杀死托管您的Service.

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

于 2016-12-08T12:40:13.890 回答
0

谢谢大家的建议。我最终能够做到这一点的方法是使用本身创建的前台服务和 asynctask 在后台执行工作。我是一个新手,所以不完全知道它是如何工作的,但它不会导致任何应用程序冻结/滞后,即使应用程序从最近的任务列表中滑动,它也能正常工作。(在 Android L(5.1.1) 和 M 中测试)

于 2016-12-08T15:49:53.810 回答