Android 中的共享首选项和内部存储有什么区别?数据存储在哪里?

what is the difference between shared preferences and internal storage in Android? Where does the data stored?

Android 中共享首选项和内部存储有什么区别?数据存储在哪里?看起来 Android 系统为每个应用程序分配了特定数量的 space。使用共享首选项时,我的应用程序 运行 内存不足并抛出 OutOfMemory 异常。如果我使用内部存储将这些数据保存到文件中,是否可以解决问题?如果内部存储也为应用程序使用相同的有限分配space,那么如何解决这个问题?

  • SharedPreference:将私有原始数据存储在键值对中。 (存储小entries/data)

  • 内部存储:将私有数据存储在设备内存中。 (存储大型数据集)

使用共享首选项,您无需处理文件 IO。对于内部存储,您需要处理文件 IO。

如果您有大量数据,您应该使用内部存储。此外,您还需要避免存储不必要的数据。

有关详细信息,请阅读 https://developer.android.com/guide/topics/data/data-storage.html

SharedPreferences 以键值对的形式存储数据。它主要将它们存储在 RAM 中,但也会将副本保存到内部存储器中。 Android 提供 RAM 用于存储您的代码、所有图形和任何临时数据,并且它是有限的。如果您存储了很多键值对(并且这些值可能很长 Strings),您可能确实会为您的应用程序使用所有 RAM 并最终得到一个 OutOfMemoryException。这表明 SharedPreference 可能不是您要存储的数据的正确方法。

相反,内部存储完全基于闪存。应用程序在那里的限制较少,并且它们可以存储大量数据,例如图像。内部存储有点像一个目录,所以你创建文件,read/write在它们上面,删除它们等等,所以它不同于键值对。

what is the difference between shared preferences and internal storage in Android?

Internal storage 指板载闪存上的一个位置,该位置对您的应用程序是私有的,用户不可见。

SharedPreferences 是一种在内部存储器上存储数据的方法。

Looks like Android system allocates specific amount of space for each application.

不,尽管他们将来可能会这样做。

While using shared preferences, my app ran out of memory and threw OutOfMemory Exception

OutOfMemoryError指的是堆space(RAM),不是存储space.

If I use internal storage to save this data into files, will this resolve the issue?

有可能,但这在很大程度上取决于你在做什么。