Android 为什么要将外部存储用于意图数据?

Android 为什么要将外部存储用于意图数据?,android,android-intent,Android,Android Intent,我想使用发送意图发送使用我的应用程序创建的图像。 我查看了许多此类意图的示例,并注意到它们都使用外部存储来存储将使用意图发送的临时图像文件 使用外部存储器有什么具体原因吗? 在我看来,这是一个危险的选择,因为如果没有安装外部存储,用户将无法将图像发布到web上,这感觉相当奇怪 此外,您将在哪里保存应用程序的工作数据?在onPause()中,我将用户正在处理的当前映像保存在内部存储器中,但您是否建议将其存储在外部存储器中?映像采用字节数组格式。当您直接发送时,可能需要时间(即,如果您在远程服务器上

我想使用发送意图发送使用我的应用程序创建的图像。 我查看了许多此类意图的示例,并注意到它们都使用外部存储来存储将使用意图发送的临时图像文件

使用外部存储器有什么具体原因吗? 在我看来,这是一个危险的选择,因为如果没有安装外部存储,用户将无法将图像发布到web上,这感觉相当奇怪


此外,您将在哪里保存应用程序的工作数据?在onPause()中,我将用户正在处理的当前映像保存在内部存储器中,但您是否建议将其存储在外部存储器中?

映像采用字节数组格式。当您直接发送时,可能需要时间(即,如果您在远程服务器上发送)。有时应用程序可能会挂起。所以为了避免这种顺序编程,开发人员使用并行代码,这里一个代码将图像保存在存储设备中,另一个用于上传部分


另一个好处是,直接发送可能会导致数据丢失,而在外部存储上进行保存可以防止此类情况

这很常见,因为图像可能相当大。在某些设备中,内部存储有些珍贵(因此Apps2SD很受欢迎)。此外,有时您可能希望应用程序之外的用户可以访问这些图像。如果真的只是暂时的,你应该考虑使用./P> 有关存储的信息,请参阅。如果您想使用内部存储和回退到外部存储,则在该文档中可以查看外部存储是否可用


哦,在您的场景中,主要原因很简单,您的内部存储块只能由您的应用程序访问。如果发送目的是发送到不是您的应用程序的组件,它将无法访问您的内部存储区域。

原因是Android中的IPC数据有一个限制,大约1MB。这意味着,如果您在意图的额外内容中添加了更多内容,那么当您尝试使用此意图启动活动时,将出现错误。因此,通过意图传递图像的唯一方法是向实际图像传递指针(URL、文件名)。由于私有文件仅对应用程序可见,因此您必须存储到外部(共享)存储或传递内容提供程序URI(当然,您需要编写内容提供程序)。共享存储是更简单的方法

是的,图像存储在那里只是为了能够以发送意图向其发送Uri,以便允许用户将其发布在Twitter/Facebook/任何网站上。之后我会删除它。如果与一起使用,我不能将其提供给其他应用程序吗?是的,这是真的,您可以使用
MODE\u WORLD\u WRITEABLE
MODE\u WORLD\u READABLE
创建它,它应该可以工作。我不认为在您的场景中使用内部存储有任何固有的错误,只是试图解释为什么所有示例都使用外部存储。