a) Background Thread b) Main Dispatch Queue (Main Thread) ✅ c) Global Queue d) Custom Serial Queue
a) onResume() b) onStart() c) onRestart() d) onRedraw() ✅
a) SQLite Database b) Internal Storage c) SharedPreferences ✅ d) Room Database
a) Model-View-Controller ✅ b) Module-View-Controller c) Model-View-Component d) Main-View-Controller
private fun checkAndRequestCameraPermission() if (ContextCompat.checkSelfPermission( this, Manifest.permission.CAMERA ) == PackageManager.PERMISSION_GRANTED ) // Permission already granted openCamera() else // Request permission ActivityCompat.requestPermissions( this, arrayOf(Manifest.permission.CAMERA), CAMERA_PERMISSION_CODE )
a) Declare in manifest only b) Request at runtime using requestPermissions() ✅ c) No need to request d) Use uses-permission-sdk only
// Handle the result override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray ) super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == CAMERA_PERMISSION_CODE) if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) openCamera() else // Show rationale or disable feature Toast.makeText(this, "Camera permission denied", Toast.LENGTH_SHORT).show()