ڈیٹا پرسٹنس اس بات کو یقینی بناتا ہے کے موبائل ایپلیکیشن کے سیشنز کے درمیان صارف کی معلومات محفوظ رہے۔ اس ٹیکنالاجی کے بغیر، ہر ابتدا صفر سے شروع ہوگی — ترتیبات، ہسٹری اور ڈائن لوڈ کی گئی فائلیں بند کرنے پر گم ہو جائیں گین۔ Google Developers, 2024 کے مطابق، 90% سے زائد موبائل ایپلیکیشنز صارف کے ڈیٹا اور انٹرفیس کی حالت کو محفوظ رکھنے کے لیے کم سے کم ایک پرسٹنس میکانزم استعمال کرتے ہیں۔
اہم نکات
Data Persistence کسی ایپلیکیشن کی آلہ کی غیر متغیر میمری میں ڈیٹا محفوظ کرنے کی صلاحیت ہے۔ موبائل ڈیولپمنٹ میں، پرسٹنس میں ڈیٹابیسز، فائل سسٹم، ترتیبات اور کیش شامل ہیں۔ ہر میکانزم کی کارکردگی، حفاظت اور ذخیرہ کی گنجائش کے حوالے سے اپنی خصوصیات ہیں۔
عارضی ڈیٹا صرف RAM میں موجود ہوتا ہے اور عملیہ کے ختم ہونے پر گم ہو جاتا ہے۔ اس میں سکرین کی حالت، عارضی حساب اور تصویر کیش شامل ہیں۔ مستقل ڈیٹا فائل سسٹم یا ڈیٹابیس میں لکھا جاتا ہے اور ایپ کے دوبارہ شروع کرنے کے بعد بھی دستیاب رہتا ہے۔ اس میں صارف کی ترتیبات، اختیار کے ٹوکنز، عملیات کی ہسٹری اور ڈائن لوڈ کردہ مواد شامل ہیں۔
ذخیرہ کا طریقہ چونتے وقت، ڈیولپرز کئی عوامل کا جائزہ لیتے ہیں۔ ڈیٹا کی قسم ذخیرہ کے چھٹے کا تعین کرتی ہے: سادہ ترتیبات — SharedPreferences یا DataStore، منظم ریکارڈز — SQLite یا Room، فائلیں — File Storage۔ ڈیٹا کا حجم کارکردگی کو متاثر کرتا ہے: ڈیٹابیسز ہزاروں ریکارڈز کے لیے بہترین ہیں، جبکہ فائلیں بڑے بائنری آبجیکٹس کے لیے موزوں ہیں۔ حفاظت کے لیے EncryptedSharedPreferences یا SQLCipher کے ذریعہ حساس معلومات کو خفیہ کرنے کی ضرورت ہے۔
data class StorageOption(
name: String,
dataType: StorageType,
capacity: Long,
secure: Boolean
)
enum class StorageType {
KEY_VALUE,
RELATIONAL,
FILE
}
SharedPreferences Android پر کلید-قدر کے جوڑے محفوظ کرنے کا کلاسیکی طریقہ ہے۔ یہ API پلیٹ فارم کے پہلے ورژنز سے دستیاب ہے اور اساسی اقسام کی تاید کرتا ہے: سٹرنگز، عدد، بولین قیمتیں۔ ڈیٹا ایپ کی ذاتی ڈائریکٹری میں XML فائل میں محفوظ ہوتا ہے اور صرف اس کے عملیہ کے لیے رسائی ہے۔
Jetpack DataStore Kotlin Coroutines اور Flow پر تعمیر شدہ SharedPreferences کا ایک جدید متبادل ہے۔ DataStore دو قسمیں پریش کرتا ہے: ساده قیمتیں کے لیے Preferences DataStore اور ٹائپ شدہ آبجیکٹس کے لیے Proto DataStore۔ SharedPreferences کے برعکس، DataStore هم زمان رسائی کے تحت ڈیٹا مستقلیت کی ضمانت دیتا ہے اور مرکزی ثریڈ کو روکے بغیر غیر هم زمان کاروائی کی حمایت کرتا ہے۔
// SharedPreferences — روایتی طریقہ
val prefs = context
.getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
putString("username", "john_doe")
putInt("score", 1500)
apply()
}
// DataStore — غیر هم زمان طریقہ
val settingsDataStore = context
.createDataStore("settings.pb")
val usernameFlow: Flow<String> = settingsDataStore
.data
.map { it[USERNAME_KEY] ?: "" }
iOS پر، SharedPreferences کا ہم پلہ UserDefaults ہے — Property List فارمٹ میں ساده قیمتیں محفوظ کرنے کا ایک نظام۔ UserDefaults هم زمان رسائی استعمال کرتا ہے اور ترتیب کے ڈیٹا کی چھوٹی مقدار کے لیے موزوں ہے، لیکن حساس معلومات کے ذخیرہ کے لیے تجویز نہیں کی جاتی۔
SQLite ایک ضمنی متعلقاتی ڈیٹابیس ہے جو علاحدہ سرور کے بغیر ایپ کے عملیہ کے اندر چلتی ہے۔ موبائل ڈیولپمنٹ میں یہ سب سے مقبول DBMS ہے: یہ دونوں پلیٹ فارمز پر طور طور استعمال ہوتی ہے۔ Android SDK میں SQLite شامل کرتا ہے، اور iOS libsqlite3 لائبریری میں شامل کرتا ہے۔ SQLite معیاری SQL، لین دین، انڈیکسز اور ٹرگرز کی حمایت کرتی ہے۔
SQLite کے ساتھ کام کا آغاز ڈیٹابیس کے سکیم کی وضاحت سے ہوتا ہے۔ ڈیولپر ٹیبلیں، ان کے فیلڈز اور اقسام کی وضاحت کرتا ہے، پھر درج، پڑھنا، تازہ کرنا اور حذف کی کاروائی کرتا ہے۔ Android پر SQLiteOpenHelper ڈیٹابیس کی تخلیق اور مائگریشنز کا انتظام کرتا ہے، جبکہ iOS C انٹرفیس یا FMDB ریپر استعمال کرتا ہے۔
// Android پر 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)
}
}
| ڈیٹا کی قسم | SharedPreferences | SQLite | فائل سسٹم |
|---|---|---|---|
| قسم | کلید-قدر | متعلقاتی DB | بائنری فائلیں |
| مقدار | سوئیں ریکارڈز | ہزاروں ریکارڈز | دستیاب جگہ |
| کارکردگی | اعلیٰ | درمیانہ | حجم پر منحصر |
| ممولی استعمال | ترتیبات | منظم ڈیٹا | تصویریں، ویڈیو |
Room Jetpack کی ایک لائبریری ہے جو SQLite کے اوپر ORM کی پرت فراہم کرتی ہے۔ Room SQL کوئریز اور ContentValues لکھنے کے دوہرائی کام کو ختم کرتی ہے، ان کی جگہ اینوٹیشنز اور Kotlin فنکشنز کا استعمال کرتی ہے۔ Room کامپائلر تعمیر کے وقت DAO (Data Access Object) کے نفاذ پیدا کرتا ہے، جو SQL گرامر کی غلطیوں کو ختم کرتا ہے۔
Room کو ضم کرنے کے لیے، آپ کو kapt انحصار شامل کرنا ہوگا اور هستی کے طبقہ، DAO انٹرفیس اور ڈیٹابیس کے طبقہ پر اینوٹیشن لگانا ہوگا۔ RoomDatabase داخلی مقام کے طور کام کرتا ہے: اس کے زریعہ DAO حاصل کیا جاتا ہے اور ڈیٹابیس کے کاروائی، انجام دی جاتی ہیں۔ Room ری ایکٹف کوئریز کے لیے Flow، اسکیم مائگریشنز اور تعمیر کے وقت کوئری کی تصدیق کی حمایت کرتا ہے۔
@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 کا فریم ورک ہے۔ Room کے برعکس، Core Data ٹیبلیوں کے ساتھ نہیں بلکہ منتظم آبجیکٹس (NSManagedObject) کے ساتھ کام کرتا ہے جو تعلقات کا درجہ بندی بناتے ہیں۔ Core Data سست لوڈنگ، تبدیلیات کو واپس لیتے ہوئے اور NSFetchRequest کے ذریعہ پیچیدہ کوئریز کی حمایت کرتا ہے۔
Core Data کا مرکزی حصہ تین اجزاء پر مشتمل ہے: منتظم آبجیکٹ کونٹیکسٹ (NSManagedObjectContext)، مستقل ذخیرہ کوآرڈینیٹر (NSPersistentStoreCoordinator) اور ڈیٹا ماڈل (NSManagedObjectModel)۔ NSPersistentContainer تمام اجزاء کو ایک واحد داخلی مقام میں متحد کرتا ہے، جو جدید Swift ایپلیکیشنز کے لیے ترتیب کو آسان بناتا ہے۔
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("Save error: \(error)")
}
}
}
فائل ذخیرہ (File Storage) تصویروں، ویڈیو اور دستاویز کو محفوظ کرنے کے لیے استعمال ہوتا ہے۔ Android اندرونی ذخیرہ (context.filesDir) — ایپ کے لیے ذاتی، اور بیرونی ذخیرہ (Environment.getExternalStorageDirectory) — دیگر ایپس کے لیے رسائی فراہم کرتا ہے۔ iOS پر، فائلیں Documents اور Library کی ڈائریکٹریوں میں محفوظ ہوتی ہیں، جہاں Library/Caches کیش کے لیے ہے جو iCloud میں بیک اپ نہیں ہوتا۔ فائل کی کاروائی کے لیے، دونوں پلیٹ فارمز File API اور سٹریمنگ پڑھنے/لکھنے کی کاروائی فراہم کرتے ہیں۔ Coil اور SDWebImage جیسی جدید لائبریریاں بہترین کارکردگی کے لیے فائل ذخیرہ کو RAM کے ساتھ ملا کر ایک کیشنگ پرت شامل کرتی ہیں۔
Android پر، پیچیدگی اور کارکردگی میں Core Data کا متبادل Realm ہے — ایک آبجیکٹ ڈیٹابیس جو SQL کی پرت کے بغیر سیدھے ماڈلز کے ساتھ کام کرتا ہے۔ Realm پڑھنے کے کاروائی میں SQLite سے تیز ہے اور لائیو آبجیکٹس کی حمایت کرتا ہے جو ڈیٹا بدلنے پر خودکار طور پر UI کو اپ ڈیٹ کرتے ہیں۔
اکثر پوچے جانے والے سوالات
Data Persistence آلہ کی غیر متغیر میمری میں ڈیٹا محفوظ کرنے کے میکانزم کو کہتے ہیں، جو ایپ کے دوبارہ شروع کرنے پر ان کی دستیابی کو یقینی بناتے ہیں۔ ان میں ڈیٹابیسز، فائل ذخیرہ اور ترتیبات کے نظام شامل ہیں۔
Room SQLite پر ایک ORM ریپر ہے جو دستی SQL کوئریز اور ContentValues کو ختم کرتا ہے۔ Room تعمیر کے وقت SQL کوئریز کی تصدیق کرتا ہے، Kotlin Coroutines اور Flow کی حمایت کرتا ہے، اور خودکار طور پر ڈیٹا رسائی کوڈ تیار کرتا ہے۔
SharedPreferences تھوڑی مقدار میں سادہ ڈیٹا محفوظ کرنے کے لیے موزوں ہے: ایپ کی ترتیبات، فلیجز، شناختی اور صارف کی ترجیحات۔ پیچیدہ یا منظم ڈیٹا کے لیے، Room یا DataStore استعمال کرنا بہتر ہے۔
Core Data آبجیکٹ گراف کو منتظم کرنے کا Apple کا فریم ورک ہے۔ یہ منتظم آبجیکٹس، تبدیلیات کی ٹریکنگ، سست لوڈنگ اور ایک ذخیرہ (SQLite، XML یا بائنری فارمٹ) میں خودکار پرسٹنس فراہم کرتا ہے۔
انتخاب ڈیٹا کی پیچیدگی پر منحصر ہے: ترتیبات کے لیے — DataStore یا UserDefaults، منظم ریکارڈز کے لیے — Room (Android) یا Core Data (iOS)، فائلوں کے لیے — File Storage۔ معیار میں ڈیٹا کا حجم، کارکردگی کے تقاضے اور خفیہ کرنے کی ضرورت شامل ہیں۔ ایک ایپ میں کئی میکانزمز کو ملانا ایک معیاری مشق ہے جو ہر طریقے کی طاقت کا بہترین فائدہ اٹھانے کی اجازت دیتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں