Android保存图像(经过一些处理)最佳方法

Posted

技术标签:

【中文标题】Android保存图像(经过一些处理)最佳方法【英文标题】:Android Saving Images(with some processing) Optimal Method 【发布时间】:2017-04-23 02:23:25 【问题描述】:

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

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

2) Intent Service(问题:与 Asynctask 相同)

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

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

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

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您无法阻止 android 终止您的进程。如果用户想要杀死它(例如,使用“强制停止”),它将被杀死。你无法阻止这种情况发生。

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

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

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

【讨论】:

感谢您的帮助,但即使应用程序被交换,我也需要服务继续(强制停止可能会很困难)【参考方案2】:

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

【讨论】:

如果您在 Android 4.0 或 Android 4.3 或 4.4 上运行您的应用程序,您应该会看到会发生什么。我想你会发现它没有做你想做的事。 @DavidWasser 哦。是否有一些关于此的文件?真的不是很了解。

以上是关于Android保存图像(经过一些处理)最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

删除已保存图像周围的空白

在服务器上处理图像的最佳方法?

如何保存经过处理的图像?

Android Studio:保存和检索用户输入数据的最佳方法

如何在 Android 上自动保存表单 - 最佳实践

一定时间后关闭程序的最佳方法