Datalagring i mobilutveckling: vad det är, metoder och hur det fungerar

Författare: IT Sectr Publicerad: 2026-03-08 Lästid: 9 min

Datalagring är en av de viktigaste uppgifterna för en mobilapplikation, som påverkar prestanda, säkerhet och användarupplevelse. I den här artikeln kommer vi att täcka SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore och Keychain, samt serialiseringsformat (JSON, Protobuf) och bibliotek (Gson, Moshi, kotlinx.serialization). Den här guiden hjälper nybörjarutvecklare att välja rätt datalagringslösning. Läs mer i den officiella Android-guiden för datalagring.

Viktiga punkter

  • Room (Android) och Core Data (iOS) är de officiella ORM:erna för att arbeta med relationsdatabaser på varje plattform
  • SharedPreferences (Android) ersätts av DataStore — en asynkron och typsäker nyckel-värde lagring
  • För säker lagring av tokens används Keystore (Android) och Keychain (iOS) med hårdvaruskydd
  • Firebase Firestore är en NoSQL-databas med realtidssynkronisering och offlineläge
  • Serialisering — omvandling av objekt till JSON/Protobuf via Gson, Moshi, kotlinx.serialization

Lokala databaser: SQLite, Room, Core Data, Realm

För att lagra strukturerad data med relationer mellan entiteter används relationsdatabaser.

SQLite

SQLite är en inbäddad relationsdatabas som fungerar på alla mobila plattformar. Den kräver ingen separat server, data lagras i en enda fil. SQLite är grunden för Room (Android) och valfritt för Core Data (iOS). Bibliotek: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room är det officiella Android Architecture Components-biblioteket för att arbeta med SQLite. Det tillhandahåller ett ORM-lager: Entity (tabell), DAO (frågor), Database (inkörsport). Room kontrollerar SQL-frågor vid kompilering, stöder koroutiner och Flow och migrerar automatiskt schemat.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data är Apples ramverk för att hantera en objektgraf. Det är inte en ren databas — det är ett persistenslager ovanpå SQLite, XML eller binär lagring. Core Data hanterar objekt (NSManagedObject), relationer, schemaversionering, ångra/gör om och flertrådning via NSManagedObjectContext.

Realm

Realm är ett alternativ till SQLite, designat som en högpresterande mobil databas. Realm är snabbare än SQLite vid läsning och skrivning, stöder reaktiva notifieringar (Live Objects), kryptering i farten och plattformsoberoende (Android, iOS, Flutter, React Native). Nackdelar: ökad APK/IPA-storlek och högre minnesanvändning.

Nyckel-värde lagring och inställningar

För att lagra små mängder data (inställningar, tokens, cache) används enkla nyckel-värde-lager.

SharedPreferences (Android)

SharedPreferences är ett äldre nyckel-värde-lager i Android. Nackdelar: synkron åtkomst (blockerar UI vid läsning), brist på typning, ANR-risk vid laddning av stora filer. Rekommenderas INTE för nya projekt.

DataStore (Jetpack Android)

DataStore är den moderna ersättningen för SharedPreferences från Google. Den fungerar asynkront via Kotlin Coroutines och Flow, stöder Preferences DataStore (nyckel-värde) och Proto DataStore (typad data via Protobuf). DataStore är säker för UI-tråden och stöder transaktioner.

NSUserDefaults (iOS)

UserDefaults är standardlagring för små inställningar i iOS. Den stöder primitiva typer, strängar, datum, Data. UserDefaults är synkron, så den är inte lämplig för stora datavolymer. Registrering av värden via register(defaults:) anger standardvärden.

Molndatabaser: Firebase Firestore och Realtime DB

För datalagring i applikationer som kräver synkronisering mellan enheter används Firebase molndatabaser.

Cloud Firestore

Firebase Firestore är en NoSQL-dokumentdatabas med realtidsprenumerationer, automatisk skalning, kraftfulla frågor och inbyggt offlineläge. Data organiseras i samlingar och dokument (JSON-liknande strukturer). Firestore stöder transaktioner och batchoperationer. Idealisk för chattar, flöden och sociala appar.

Firebase Realtime Database

Firebase Realtime Database är en äldre Firebase NoSQL-databas som lagrar data som ett enda JSON-träd. Enklare än Firestore men mindre flexibel i frågor och skalning. Rekommenderas för enkla realtidsapplikationer (online-status, enkla chattar).

FunktionCloud FirestoreFirebase Realtime DB
DatamodellSamlingar → DokumentJSON-träd
FrågorKomplexa (filtrering, sortering, gränser)Enkla (efter nyckel)
SkalningAutomatiskManuell sharding
OfflinelägeJa (beständig cache)Ja
PrisPer läs-/skrivoperationPer trafik + lagring

Säker lagring: Keystore, Keychain och EncryptedSharedPreferences

Lagring av tokens, lösenord och krypteringsnycklar kräver särskilda skyddade lager.

Android Keystore

Android Keystore är en systemlagring för kryptografiska nycklar. Nycklar lagras i en hårdvarumiljö (TEE — Trusted Execution Environment), otillgänglig för appar och operativsystem. Den stöder nyckelgenerering, kryptering och signering. Android 9+ innehåller StrongBox Keymaster (dedikerat chip).

iOS Keychain

Keychain Services är en säker iOS-lagring för lösenord, nycklar och certifikat. Data krypteras med hårdvarans Secure Enclave. Keychain stöder tillgänglighetsnivåer: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences är ett omslag kring SharedPreferences med nyckel- och värdekryptering via AES256-GCM och HKDF. Implementerat i AndroidX Security-biblioteket. Rekommenderas för lagring av tokens och känsliga inställningar.

På IT Sectr använder vi Android Keystore + EncryptedSharedPreferences för att lagra uppdateringstoken och biometribaserade nycklar. På iOS använder vi Keychain med nivån kSecAttrAccessibleWhenUnlockedThisDeviceOnly för maximal säkerhet.

Fillagring: Internal, External, Cache Directory

För fillagring (bilder, videor, dokument) tillhandahåller mobila plattformar flera typer av lagring.

Android Storage

Android skiljer mellan Internal Storage (/data/data/paket/ — privat lagring) och External Storage (SD-kort eller emulerad partition). Cache Directory är tillfällig lagring som systemet kan rensa. Scoped Storage (Android 10+) begränsar åtkomsten till External Storage — appar ser bara sina egna filer eller filer via MediaStore/SAF.

iOS Storage

iOS tillhandahåller Documents Directory (iCloud-säkerhetskopiering, beständig data), Library/Caches (tillfälliga filer, ingen säkerhetskopiering) och Tmp Directory (tillfälliga, kan rensas). Använd NSFileManager för att arbeta med filsystemet. iOS 11+ stöder File Provider för molnfiler.

Dataserialisering: JSON, Protobuf och bibliotek

Serialisering omvandlar objekt till ett format för överföring eller lagring. Deserialisering är den omvända processen.

Format

JSON (JavaScript Object Notation) är det populäraste formatet: läsbart, flexibelt, stöds av alla plattformar. XML är striktare, används i äldre system. Protobuf (Protocol Buffers) är ett binärt format från Google: 3-10 gånger mer kompakt än JSON, snabbare att tolka, med strikt schema. Används för högbelastade system och mikrotjänster.

Android-bibliotek

  • Gson (Google) — enkelt, flexibelt, men långsamt. Fungerar automatiskt med Java/Kotlin-objekt
  • Moshi (Square) — snabbare än Gson, bättre Kotlin-stöd (icke-null egenskaper, standardvärden, sealed-klasser)
  • kotlinx.serialization — inbyggd Kotlin-serialisering från JetBrains, fungerar vid kompilering, stöder JSON, Protobuf, CBOR

iOS-bibliotek

JSONSerialization är det inbyggda API:t för att arbeta med JSON. Codable (Encodable/Decodable) är ett modernt Swift-protokoll för automatisk serialisering till JSON, Property List och andra format.

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

Plattformsoberoende lösningar: Hive, ObjectBox, Drift

För Flutter och React Native finns det egna effektiva lagringsbibliotek.

Hive (Flutter)

Hive är ett lätt, snabbt nyckel-värde-lager för Flutter. Det kräver ingen native-kod (ren Dart), stöder typning via TypeAdapter och fungerar i isolat. Idealisk för cache, inställningar och små datavolymer.

ObjectBox

ObjectBox är en högpresterande inbäddad databas för Flutter, Android och iOS. Den är 10+ gånger snabbare än SQLite och använder en platt filstruktur för minimal overhead. Stöder relationer, frågor och reaktiva prenumerationer (ObjectBox Dart).

Drift (tidigare Moor)

Drift är ett reaktivt SQLite-bibliotek för Flutter och Dart. Det tillhandahåller typsäkra frågor, migreringar, DAO-funktioner och Stream-stöd (reaktiva uppdateringar). Drift är det främsta valet för Flutter-projekt som kräver SQLite.

Vanliga frågor

Vad är bättre för lokal datalagring: Room eller Core Data?

Valet beror på plattformen: Room (Android) är det officiella SQLite-baserade biblioteket med kompileringstidskontroll av frågor. Core Data (iOS) är Apples ramverk med objektgraf. För plattformsoberoende projekt är Realm eller SQLite via ORM lämpligt.

Vad är skillnaden mellan SharedPreferences och DataStore?

SharedPreferences är en gammal implementering med synkron åtkomst och ANR-risk. DataStore (Jetpack) är en modern ersättning baserad på Kotlin Coroutines och Flow, som stöder asynkronitet, typning och felskydd.

Hur lagrar man tokens och lösenord säkert i en mobilapp?

Android: EncryptedSharedPreferences eller Android Keystore. iOS: Keychain Services med tillgänglighet WhenUnlockedThisDeviceOnly. För kritisk data, använd Secure Enclave (iOS) och hårdvaru-Keystore (Android) med biometri.

Vad är Firebase Firestore och när ska det användas?

Cloud Firestore är en NoSQL-databas från Firebase med realtidssynkronisering, offlineläge och automatisk skalning. Lämplig för chattar, nyhetsflöden och projekt som behöver synkronisering mellan enheter.

Vilka ORM finns för Flutter och React Native?

Flutter: Hive (snabb nyckel-värde), Floor (SQLite ORM), Drift (Moor, reaktiv SQLite), ObjectBox (högpresterande inbäddad DB). React Native: Realm, WatermelonDB (lat laddning) och AsyncStorage (liknar SharedPreferences).

Sammanfattning

  • Room (Android) och Core Data (iOS) är de officiella lösningarna för relationsdatabaser på varje plattform
  • DataStore ersätter SharedPreferences för asynkron lagring av inställningar
  • Keystore / Keychain är obligatoriska för säker lagring av tokens och nycklar
  • Firebase Firestore är det bästa valet för realtidssynkronisering mellan enheter
  • Kotlinx.serialization (Android) och Codable (iOS) är moderna serialiseringsmetoder
  • För Flutter: Drift (SQLite), Hive (nyckel-värde), ObjectBox (hög prestanda)
  • Realm är ett plattformsoberoende alternativ till SQLite med reaktiva notifieringar

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet