Məlumatların davamlı saxlanması mobil tətbiqin iş sessiyaları arasında istifadəçi məlumatlarının qorunmasını təmin edir. Bu texnologiya olmadan proqramın hər açılışı təmiz vərəqdən başlayardı — parametrlər, tarixçə və yüklənmiş fayllar bağlananda itirilərdi. Google Developers, 2024 məlumatlarına görə, mobil tətbiqlərin 90%-dən çoxu istifadəçi məlumatlarını və interfeys vəziyyətini qorumaq üçün ən azı bir davamlı saxlama mexanizmindən istifadə edir.
Əsas məqamlar
Data Persistence — tətbiqin məlumatları cihazın qeyri-uçucu yaddaşında saxlama qabiliyyətidir. Mobil inkişafda davamlı saxlama verilənlər bazalarını, fayl sistemini, parametrləri və keşi əhatə edir. Hər bir mexanizmin öz performans, təhlükəsizlik və saxlama həcmi xüsusiyyətləri var.
Müvəqqəti məlumatlar yalnız operativ yaddaşda mövcuddur və proses bitdikdə itirilir. Bunlara ekran vəziyyəti, müvəqqəti hesablamalar və şəkil keşi daxildir. Davamlı məlumatlar fayl sisteminə və ya verilənlər bazasına yazılır və tətbiq yenidən başladıldıqda əlçatan qalır. Bunlara istifadəçi parametrləri, avtorizasiya tokenləri, əməliyyat tarixçəsi və yüklənmiş məzmun daxildir.
Saxlama üsulunu seçərkən proqramçı bir neçə amili qiymətləndirir. Məlumat növü saxlama strukturunu müəyyən edir: sadə parametrlər — SharedPreferences və ya DataStore, strukturlaşdırılmış qeydlər — SQLite və ya Room, fayllar — File Storage. Məlumatların həcmi performansa təsir edir: verilənlər bazaları minlərlə qeyd üçün optimallaşdırılıb, fayllar isə böyük ikili obyektlər üçün. Təhlükəsizlik həssas məlumatların EncryptedSharedPreferences və ya SQLCipher vasitəsilə şifrələnməsini tələb edir.
data class StorageOption(
name: String,
dataType: StorageType,
capacity: Long,
secure: Boolean
)
enum class StorageType {
KEY_VALUE,
RELATIONAL,
FILE
}
SharedPreferences — Android-də açar-dəyər cütlərini saxlamaq üçün klassik üsul. Bu API platformanın ilk versiyalarından mövcuddur və primitiv növləri dəstəkləyir: sətirlər, ədədlər, məntiqi dəyərlər. Məlumatlar tətbiqin xüsusi kataloqunda XML faylında saxlanılır və yalnız onun prosesi üçün əlçatandır.
Jetpack DataStore — Kotlin Coroutines və Flow üzərində qurulmuş SharedPreferences-in müasir əvəzedicisidir. DataStore iki variant təklif edir: sadə dəyərlər üçün Preferences DataStore və tipləşdirilmiş obyektlər üçün Proto DataStore. SharedPreferences-dən fərqli olaraq, DataStore rəqabətli giriş zamanı məlumatların ardıcıllığını təmin edir və əsas axını bloklamadan asinxron əməliyyatları dəstəkləyir.
// SharedPreferences — ənənəvi üsul
val prefs = context
.getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
putString("username", "john_doe")
putInt("score", 1500)
apply()
}
// DataStore — asinxron yanaşma
val settingsDataStore = context
.createDataStore("settings.pb")
val usernameFlow: Flow<String> = settingsDataStore
.data
.map { it[USERNAME_KEY] ?: "" }
iOS-da SharedPreferences-in ekvivalenti UserDefaults — Property List formatında sadə dəyərlərin saxlanması sistemidir. UserDefaults sinxron girişdən istifadə edir və kiçik həcmli konfiqurasiya məlumatları üçün uyğundur, lakin həssas məlumatların saxlanması üçün tövsiyə edilmir.
SQLite — ayrıca server olmadan tətbiq prosesi daxilində işləyən quraşdırılmış relyasiyalı verilənlər bazasıdır. Bu, mobil inkişafda ən geniş yayılmış DBMS-dir: hər iki platformada defolt olaraq istifadə olunur. Android SQLite-i SDK-ya, iOS isə libsqlite3 kitabxanasına daxil edir. SQLite standart SQL, transaksiyalar, indekslər və triggerləri dəstəkləyir.
SQLite ilə iş verilənlər bazası sxeminin yaradılması ilə başlayır. Proqramçı cədvəlləri, onların sahələrini və növlərini təyin edir, sonra əlavə etmə, oxuma, yeniləmə və silmə əməliyyatlarını yerinə yetirir. SQLiteOpenHelper Android-də verilənlər bazasının yaradılması və miqrasiyasını idarə edir, iOS-da isə C interfeysi və ya FMDB sarğısı istifadə olunur.
// Android-də SQLiteOpenHelper
class DBHelper(context: Context) :
SQLiteOpenHelper(context, "app.db", null, 1) {
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("""
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE
)
""")
}
fun insertUser(name: String, email: String) {
val db = writableDatabase
val values = ContentValues().apply {
put("name", name)
put("email", email)
}
db.insert("users", null, values)
}
}
| Məlumat növü | SharedPreferences | SQLite | Fayl sistemi |
|---|---|---|---|
| Növ | açar-dəyər | relyasiyalı VB | ikili fayllar |
| Həcm | yüzlərlə qeyd | minlərlə qeyd | mövcud yer |
| Performans | yüksək | orta | ölçüdən asılıdır |
| Tipik tətbiq | parametrlər | strukturlaşdırılmış məlumatlar | şəkillər, video |
Room — Jetpack paketindən SQLite üzərində ORM qatı təmin edən kitabxanadır. Room SQL sorğuları və ContentValues yazmaq üzrə rutin işi aradan qaldırır, onları annotasiyalar və Kotlin funksiyaları ilə əvəz edir. Room kompilyatoru DAO (Data Access Object) implementasiyasını qurma mərhələsində yaradır ki, bu da SQL sintaksisində səhvləri aradan qaldırır.
Room-u qoşmaq üçün kapt asılılığını əlavə etmək və varlıq sinfini, DAO interfeysini və verilənlər bazası sinfini annotasiya etmək lazımdır. RoomDatabase giriş nöqtəsi kimi xidmət edir: onun vasitəsilə DAO əldə edilir və baza üzərində əməliyyatlar yerinə yetirilir. Room reaktiv sorğular üçün Flow-u, sxem miqrasiyasını və sorğuların kompilyasiya mərhələsində yoxlanılmasını dəstəkləyir.
@Entity(tableName = "users")
data class User(
@PrimaryKey val id: Int,
@ColumnInfo(name = "full_name") val name: String,
@ColumnInfo val email: String
)
@Dao
interface UserDao {
@Query("SELECT * FROM users")
fun getAll(): Flow<List<User>>
@Insert
suspend fun insert(user: User)
@Delete
suspend fun delete(user: User)
}
@Database(
entities = [User::class],
version = 1
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
Core Data — Apple-ın obyekt qrafını idarə etmək və onları diskdə saxlamaq üçün çərçivəsidir. Room-dan fərqli olaraq, Core Data cədvəllərlə deyil, əlaqələr iyerarxiyası yaradan idarə olunan obyektlərlə (NSManagedObject) işləyir. Core Data tənbəl yükləməni, dəyişikliklərin ləğvini və NSFetchRequest vasitəsilə mürəkkəb sorğuları dəstəkləyir.
Core Data-nın əsasını üç komponentdən ibarət yığın təşkil edir: idarə olunan kontekst (NSManagedObjectContext), davamlı saxlama (NSPersistentStoreCoordinator) və məlumat modeli (NSManagedObjectModel). NSPersistentContainer bütün komponentləri vahid giriş nöqtəsində birləşdirir, Swift-də müasir tətbiqlər üçün konfiqurasiyanı sadələşdirir.
import CoreData
class PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
container = NSPersistentContainer(name: "AppModel")
container.loadPersistentStores { _, error in
if let error = error {
fatalError("Failed: \(error)")
}
}
}
func saveUser(name: String, email: String) {
let context = container.viewContext
let user = User(context: context)
user.name = name
user.email = email
do {
try context.save()
} catch let error {
print("Yazma xətası: \(error)")
}
}
}
Fayl saxlama (File Storage) şəkillərin, videoların və sənədlərin saxlanması üçün istifadə olunur. Android daxili yaddaşı (context.filesDir) — tətbiq üçün özəl, və xarici yaddaşı (Environment.getExternalStorageDirectory) — digər tətbiqlər üçün əlçatan təmin edir. iOS-da fayllar Documents və Library qovluqlarında saxlanılır, Library/Caches isə iCloud-da ehtiyatı aparılmayan keş üçün nəzərdə tutulub. Fayllarla işləmək üçün hər iki platforma File API və axın oxuma/yazma əməliyyatları təqdim edir. Coil və SDWebImage kimi müasir kitabxanalar optimal performans üçün fayl saxlama ilə operativ yaddaşı birləşdirən keşləmə qatı əlavə edir.
Android-də Core Data-ya mürəkkəblik və funksionallıq baxımından alternativ Realm — SQL təbəqəsi olmadan birbaşa modellərlə işləyən obyekt yönümlü verilənlər bazasıdır. Realm oxuma əməliyyatlarında SQLite-dən daha sürətlidir və məlumat dəyişdikdə UI-ni avtomatik yeniləyən canlı obyektləri dəstəkləyir.
Tez-tez verilən suallar
Data Persistence — tətbiq yenidən başladıldıqdan sonra məlumatların əlçatanlığını təmin edən, cihazın qeyri-uçucu yaddaşında məlumatların saxlanması mexanizmləridir. Bunlara verilənlər bazaları, fayl saxlama və parametr sistemləri daxildir.
Room SQLite üzərində ORM sarğısıdır ki, əl ilə SQL sorğuları və ContentValues yazmağı aradan qaldırır. Room SQL sorğularını kompilyasiya mərhələsində yoxlayır, Kotlin Coroutines və Flow-u dəstəkləyir, həmçinin avtomatik olaraq məlumat giriş kodunu yaradır.
SharedPreferences kiçik həcmli sadə məlumatların saxlanması üçün uyğundur: tətbiq parametrləri, bayraqlar, identifikatorlar və istifadəçi seçimləri. Mürəkkəb və ya strukturlaşdırılmış məlumatlar üçün Room və ya DataStore istifadə etmək daha yaxşıdır.
Core Data — Apple-ın obyekt qrafını idarə etmək üçün çərçivəsidir. O, idarə olunan obyektlərlə iş, dəyişikliklərin izlənməsi, tənbəl yükləmə və davamlı saxlamaya (SQLite, XML və ya ikili format) avtomatik yazma imkanı təmin edir.
Seçim məlumatların mürəkkəbliyindən asılıdır: parametrlər üçün — DataStore və ya UserDefaults, strukturlaşdırılmış qeydlər üçün — Room (Android) və ya Core Data (iOS), fayllar üçün — File Storage. Meyarlar məlumatların həcmini, performans tələblərini və şifrələmə ehtiyacını əhatə edir. Bir tətbiqdə bir neçə mexanizmin birləşdirilməsi hər bir yanaşmanın güclü tərəflərindən optimal istifadə etməyə imkan verən standar təcrübədir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun