- Vòng đời app và màn hình
- Android có vòng đời Activity (onCreate, onStart, onResume, onPause, onStop) và process có thể bị kill khi thiếu bộ nhớ, sau đó khôi phục lại. iOS có trạng thái active, inactive, background, suspended, quản lý qua scene. Trong React Native, AppState cho biết app đang foreground hay background để bạn tạm dừng polling, lưu nháp hoặc làm mới dữ liệu khi quay lại.
- Quyền truy cập (permissions)
- Quyền camera, vị trí, thông báo, ảnh đều được xin lúc runtime và người dùng có thể từ chối vĩnh viễn hoặc chỉ cấp một phần, ví dụ vị trí gần đúng hay chọn một vài ảnh. iOS bắt buộc chuỗi giải thích mục đích trong Info.plist; Android cần khai báo trong manifest và xử lý trường hợp phải mở Settings. Xin quyền đúng lúc người dùng cần tính năng, không xin hết khi mở app.
- Luồng xử lý (threading)
- Cả hai nền tảng đều có main thread (UI thread) và chặn nó quá lâu sẽ gây giật hoặc ANR trên Android. Swift dùng async/await và actor, Kotlin dùng coroutine với Dispatchers. Trong React Native, JS chạy trên luồng riêng, còn các thư viện như Reanimated chạy animation trên UI thread qua worklet.
- Bộ nhớ và tài nguyên
- Thiết bị tầm trung có ít RAM, ảnh lớn và danh sách dài dễ làm app bị hệ điều hành kill. iOS dùng ARC nên cần chú ý retain cycle; Android có garbage collector nhưng vẫn rò rỉ được qua context bị giữ lâu. Hãy resize ảnh, dọn listener khi unmount và theo dõi bộ nhớ bằng Xcode Instruments hoặc Android Studio Profiler.
- Xử lý nền và thông báo
- Hệ điều hành giới hạn rất chặt việc chạy nền để tiết kiệm pin: iOS dùng BGTaskScheduler, Android dùng WorkManager. Push notification đi qua APNs và FCM, cần token, xử lý khi app đang mở, chạy nền hoặc đã tắt, và deep link từ thông báo vào đúng màn hình.