Android中的存储详解
Android设备具有多种存储选项,应用可以使用这些存储选项来存储数据。但是,每种存储选项都有其自己的特点和局限性,本文将对Android设备中存储的不同类型进行详细介绍。
前言
在 Android 设备中,可以使用几种不同类型的存储选项来存储应用程序数据,包括以下类型:
- 内部存储
- 外部存储
- 基于网络的存储
内部存储
内部存储指应用程序的私有存储,它可以通过“上下文”对象来访问。这个存储在设备闪存中,与应用一起被安装在设备上,只能被当前应用程序读取和写入。使用内部存储时可以使用的三种方法:
Internal Storage
在Android中,可以通过Context
类对象的getFilesDir()
方法来获取应用程序的内部文件系统目录。这个目录中的文件仅供应用本身使用,并且只适用于当前的设备和应用程序。在创建文件时,应该使用openFileOutput方法。
示例:保存一个字符串到内部存储中
String filename = "hello_world.txt";
String string = "Hello world!";
FileOutputStream outputStream;
try {
outputStream = openFileOutput(filename, Context.MODE_PRIVATE);
outputStream.write(string.getBytes());
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Shared Preferences
Android应用中,也可以使用SharedPreferences来存储数据到内部存储。SharedPreferences是键值对存储数据的一种方式,它将数据存储在应用程序的私有目录中。
示例:使用SharedPreferences存储一个字符串
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(getString(R.string.saved_high_score_key), newHighScore);
editor.commit();
SQLite Databases
SQLite是一种轻量级的关系型数据库,可以在Android应用中使用。它将数据存储在文件系统中,对于存储大量数据很有用。
示例:创建一个SQLite数据库
public class FeedReaderDbHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "FeedReader.db";
public FeedReaderDbHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public void onCreate(SQLiteDatabase db) {
db.execSQL(SQL_CREATE_ENTRIES);
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(SQL_DELETE_ENTRIES);
onCreate(db);
}
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
}
外部存储
外部存储是可移动的存储选项,例如SD卡或USB驱动器。应用程序可以从外部存储读取和写入数据。在使用外部存储时必须考虑一些限制因素,例如可访问性和可移动性等。
Public External Storage
Android提供了一个称为getExternalStoragePublicDirectory()
的API,允许我们在公共外部存储中存储文件。公共外部存储是一个可被其他应用程序和用户访问的文件存储目录。
示例:将一个文件保存到公共外部存储中
if(isExternalStorageWritable()) {
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyFile.jpg");
try {
OutputStream os = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, os);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Private External Storage
有时,我们在存储数据时需要一些安全性。因为其他应用程序和用户都可以访问公共外部存储,我们需要提供一些加密和额外的安全性。使用私有外部存储时,存储在SD卡上的所有文件都会被删除。
可以使用getExternalFilesDir()
方法来获取应用程序私有的外部存储目录。这个位置的文件只能被你的应用程序访问和修改,当应用程序被删除时,文件也会被删除。
示例:将一个文件保存在私有外部存储中
if(isExternalStorageWritable()) {
File file = new File(getActivity().getExternalFilesDir(Environment.DIRECTORY_PICTURES), "myImage.jpg");
try {
OutputStream os = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, os);
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
基于网络的存储
最后一种,在Android中存储数据的方式是通过网络进行存储。可以使用Web服务和云存储解决方案来存储应用程序数据,例如Amazon S3和Google Cloud Storage等。
总的来说,Android设备上的存储正在不断进化和改进。应该考虑您应用程序需要的安全性、隐私和可移植性,来决定使用哪种存储选项来存储您的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android中的存储详解 - Python技术站