PRM392Chưa đoKỳ 7Chuyên ngành Cập nhật 24/07/2026

Mobile Programming - Lập trình di động

Ôn luyện PRM392 – Lập trình di động (Mobile Programming) với ngân hàng câu hỏi trắc nghiệm Android có giải thích chi tiết, luyện thi cuối kỳ hiệu quả. Nội dung bao quát Activity, Fragment, RecyclerView, Intent, Service, BroadcastReceiver, lưu trữ SharedPreferences/SQLite và gọi API/Retrofit. Môn 3 tín chỉ tại FPT University, tiên quyết PRO192, lập trình bằng Java trên Android Studio.

271Câu hỏi
9Chủ đề

Câu hỏi của môn

264/271 câuCòn 7
AThis method is used to start the service; START_STICKY ensures that the service will never be killed by the system.
BThis method is called when startService() is invoked; START_STICKY indicates that if the service is killed, it will be recreated without any Intent being sent back.
CThis method is called when the service is created; START_STICKY indicates that the service will be restarted with the original Intent.
DThis method is called when the service is created; START_STICKY indicates that the service will be killed immediately when there are not enough resources.
Lời giải
Trong vòng đời của một dịch vụ đã được khởi chạy, mục đích của phương thức onStartCommand() là được gọi khi startService() được kích hoạt. Phương thức này cho phép dịch vụ thực hiện các hành động cần thiết khi được khởi chạy. Giá trị trả về START_STICKY có nghĩa là nếu dịch vụ bị giết, nó sẽ được tái tạo lại mà không cần gửi lại bất kỳ Intent nào. Điều này cho phép dịch vụ tiếp tục thực hiện các tác vụ của mình ngay cả khi bị giết bởi hệ thống. START_STICKY không chỉ đơn giản là tái tạo dịch vụ mà còn đảm bảo rằng dịch vụ sẽ tiếp tục thực hiện các tác vụ của mình sau khi bị giết.
Mở trang câu hỏi này →
AShared Preferences offer a lightweight and simple way to store small amounts of app data persistently.
BShared Preferences enhance the visual design of Android activities.
CShared Preferences manage network connectivity efficiently.
DShared Preferences handle background tasks seamlessly.
Lời giải
Sử dụng Shared Preferences mang lại nhiều lợi ích cho việc phát triển ứng dụng Android. Trước hết, nó cung cấp một cách đơn giản và nhẹ nhàng để lưu trữ dữ liệu nhỏ của ứng dụng một cách bền vững. Điều này giúp giảm thiểu thời gian và công sức khi cần lưu trữ hoặc truy xuất dữ liệu. Ngoài ra, Shared Preferences cũng giúp giảm thiểu việc sử dụng bộ nhớ của ứng dụng, từ đó cải thiện hiệu suất và tốc độ của ứng dụng. Điều này đặc biệt quan trọng đối với các ứng dụng có yêu cầu lưu trữ dữ liệu lớn hoặc cần truy xuất dữ liệu nhanh chóng.
Mở trang câu hỏi này →
APotential risks and challenges include race conditions, deadlocks, synchronization issues, and increased complexity of debugging.
BMultithreading in Android apps has no risks or challenges as long as AsyncTask is used for background tasks.
CMultithreading in Android apps improves app performance without any associated risks.
DMultithreading in Android apps only impacts battery consumption and has no other consequences.
Lời giải
Multithreading trong phát triển ứng dụng Android có thể mang lại nhiều lợi ích, chẳng hạn như cải thiện hiệu suất và tăng tốc độ xử lý. Tuy nhiên, cũng có những rủi ro và thách thức cần được xem xét. Một trong những rủi ro chính là điều kiện đua (race conditions), nơi mà các luồng thực thi đồng thời có thể gây ra lỗi hoặc hành vi không mong muốn. Ngoài ra, các vấn đề đồng bộ hóa (synchronization issues) cũng có thể xảy ra, khiến cho việc debug trở nên phức tạp hơn. Deadlocks, nơi mà các luồng bị mắc kẹt và không thể tiếp tục thực thi, cũng là một rủi ro cần được xem xét. Cuối cùng, việc sử dụng multithreading có thể làm tăng độ phức tạp của ứng dụng, khiến cho việc bảo trì và sửa lỗi trở nên khó khăn hơn.
Mở trang câu hỏi này →
AIt can interact directly with the UI.
BIt can handle multiple requests at the same time.
CIt uses a separate thread to handle requests, not blocking the main thread.
DIt can be interrupted.
Lời giải
IntentService là một lớp trong Android giúp thực hiện các tác vụ nền, không cần phải tương tác trực tiếp với giao diện người dùng. Một trong những lợi ích của việc sử dụng IntentService là nó sử dụng một luồng riêng biệt để xử lý yêu cầu, không chặn luồng chính của ứng dụng. Điều này giúp ứng dụng của bạn không bị chậm hoặc bị treo khi thực hiện các tác vụ nền. Ngoài ra, IntentService cũng có thể xử lý nhiều yêu cầu cùng một lúc, giúp tăng hiệu suất của ứng dụng. Tuy nhiên, IntentService không thể tương tác trực tiếp với giao diện người dùng và cũng không thể bị ngắt đột ngột.
Mở trang câu hỏi này →
AonCreate()
BonStart()
ConResume()
DonPause()
Lời giải
Khi một Activity được tạo lần đầu tiên, phương thức được gọi là onCreate(). Phương thức này được gọi khi Activity được tạo mới và được thêm vào bộ nhớ đệm. Trong phương thức này, bạn có thể thực hiện các tác vụ như khởi tạo các thành phần UI, tải dữ liệu từ cơ sở dữ liệu, v.v. Phương thức onCreate() được gọi trước khi Activity được hiển thị trên màn hình.
Mở trang câu hỏi này →
AstartActivity(new Intent(this, NewActivity.class));
Bnew Intent().start(NewActivity.class);
CIntent.start(this, NewActivity.class);
DNewActivity.start();
Lời giải

Để bắt đầu một Activity mới từ Activity hiện tại, bạn cần sử dụng phương thức startActivity() và truyền vào một đối tượng Intent. Đối tượng Intent này sẽ chứa thông tin về Activity mà bạn muốn bắt đầu. Trong ví dụ này, bạn cần tạo một Intent mới và truyền vào Activity mà bạn muốn bắt đầu, sau đó sử dụng phương thức startActivity() để bắt đầu Activity mới. Phương thức này sẽ chuyển hướng người dùng đến Activity mới và đóng Activity hiện tại. Ví dụ: startActivity(

Lời giải
new Intent(this, NewActivity.class));
Mở trang câu hỏi này →
AAppCompat
BRecycler
CRetrofit
DConstraintLayout
Lời giải
Thư viện hỗ trợ AppCompat cung cấp các phiên bản tương thích ngược của các yếu tố UI. Điều này có nghĩa là bạn có thể sử dụng các yếu tố UI này trong các ứng dụng Android cũ mà không cần phải lo lắng về việc chúng không tương thích. AppCompat cung cấp các phiên bản tương thích của các yếu tố UI như Button, TextView, EditText, v.v. Điều này giúp đảm bảo rằng ứng dụng của bạn vẫn hoạt động bình thường ngay cả khi bạn sử dụng các phiên bản cũ của Android. Ngoài ra, AppCompat cũng cung cấp các tính năng khác như hỗ trợ cho các loại font, hỗ trợ cho các loại hình ảnh, v.v. Tóm lại, AppCompat là một thư viện hỗ trợ quan trọng cho các nhà phát triển Android, giúp họ tạo ra các ứng dụng tương thích ngược và dễ dàng sử dụng.
Mở trang câu hỏi này →
ATo test network connectivity
BTo measure battery usage
CTo simulate and verify user interface interactions within a single app
DTo build app APKs
Lời giải
Câu hỏi này hỏi về mục đích chính của framework kiểm thử Espresso. Framework này được sử dụng để mô phỏng và xác minh các tương tác giao diện người dùng (UI) trong một ứng dụng duy nhất. Điều này giúp các nhà phát triển kiểm thử và đảm bảo rằng ứng dụng của họ hoạt động đúng cách và đáp ứng được các yêu cầu của người dùng. Trong quá trình kiểm thử, Espresso cho phép các nhà phát triển mô phỏng các hành động của người dùng, chẳng hạn như nhấp vào các nút, nhập văn bản vào các trường và kiểm tra các kết quả. Điều này giúp các nhà phát triển xác định và sửa lỗi sớm, từ đó cải thiện chất lượng của ứng dụng.
Mở trang câu hỏi này →
AIt wraps an intent to be executed later
BIt creates a notification
CIt manages notification channels
DIt displays notifications in the status bar
Lời giải
PendingIntent là một lớp trong Android giúp xử lý các hành động của thông báo. Nó đóng vai trò như một lớp đệm, cho phép bạn thực hiện một hành động sau này mà không cần phải khởi tạo lại toàn bộ ứng dụng. Khi bạn tạo một PendingIntent, bạn có thể truyền vào một Intent, sau đó PendingIntent sẽ thực hiện hành động đó khi được gọi. Điều này giúp tăng hiệu suất và giảm thiểu việc khởi tạo ứng dụng không cần thiết. Trong khi đó, các lựa chọn khác không chính xác về cách PendingIntent đóng góp vào việc xử lý hành động của thông báo.
Mở trang câu hỏi này →
AsendNotification()
Bnotify()
Cpush()
Dtrigger()
Lời giải
Để gửi thông báo đến hệ thống, người dùng thường sử dụng phương thức notify(). Phương thức này cho phép gửi thông báo đến các thành phần khác trong hệ thống, giúp chúng nhận thức được sự kiện hoặc thay đổi nào đó. Ví dụ, khi một người dùng đăng ký tài khoản mới, hệ thống có thể gửi thông báo đến bộ phận quản trị để họ có thể xem xét và xử lý yêu cầu đăng ký. Ngoài ra, phương thức notify() cũng có thể được sử dụng để gửi thông báo đến người dùng về các sự kiện quan trọng như thay đổi mật khẩu hoặc xác thực lại tài khoản.
Mở trang câu hỏi này →
AsendBroadcast()
BsendOrderedBroadcast()
CsendStickyBroadcast()
DsendLocalBroadcast()
Lời giải
Để gửi một tin nhắn quảng cáo đến tất cả các thiết bị đã đăng ký nhận tin, bạn cần sử dụng phương thức sendBroadcast(). Phương thức này cho phép bạn gửi một tin nhắn đến tất cả các ứng dụng đã đăng ký nhận tin, bất kể thứ tự nhận tin.
Mở trang câu hỏi này →
ANormal Broadcast
BOrdered Broadcast
CLocal Broadcast
DSticky Broadcast
Lời giải
Để đảm bảo các thiết bị nhận tin tức xử lý nó theo một thứ tự cụ thể, cho phép chỉnh sửa trước khi truyền đến thiết bị tiếp theo, bạn nên sử dụng loại phát sóng nào?
Mở trang câu hỏi này →
ATo define the layout of the app's user interface
BTo store all the app's Java code
CTo declare essential app information to the Android system
DTo display the app on the Play Store
Lời giải
Tập tin AndroidManifest.xml là một phần quan trọng của bất kỳ ứng dụng Android nào. Nó chứa thông tin cơ bản về ứng dụng, bao gồm tên, phiên bản, quyền truy cập và các thành phần khác. Mục đích chính của tập tin này là để khai báo thông tin quan trọng cho hệ thống Android, giúp nó hiểu được ứng dụng đang chạy và có thể thực hiện các hành động cần thiết. Điều này bao gồm việc xác định các hoạt động, dịch vụ, bộ nhớ chia sẻ và các thành phần khác của ứng dụng. Thông tin được khai báo trong tập tin này cũng giúp hệ thống Android xác định ứng dụng có đủ quyền truy cập và tài nguyên để chạy mà không gây ra bất kỳ vấn đề nào.
Mở trang câu hỏi này →
Aid
Bandroid:id
Cidentifier
DviewId
Lời giải

Để xác định ID của một View trong các tệp layout XML, bạn cần sử dụng thuộc tính 'android:id'. Đây là cách thức để Android nhận dạng và truy cập vào các thành phần trong giao diện người dùng. Ví dụ, bạn có thể sử dụng 'android:id' để liên kết một Button với một hành động cụ thể khi được nhấp vào. Trong XML, bạn có thể sử dụng 'android:id' như sau:

Lời giải
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content"

android:text="Nhấp vào tôi"/> </LinearLayout> Trong ví dụ trên, 'android:id' được sử dụng để xác định ID của Button là 'button'. Điều này cho phép bạn truy cập vào Button này trong mã Java và thực hiện các hành động cụ thể khi cần.

Mở trang câu hỏi này →
Afinish()
Breturn()
CexitActivity()
Dclose()
Lời giải
Để trả về đến hoạt động trước đó, người dùng có thể sử dụng phương thức nào? Trong các phương thức sau, phương thức nào cho phép người dùng quay lại hoạt động trước đó?
Mở trang câu hỏi này →
AonCreateViewHolder(), onBindViewHolder(), getItemCount()
BgetView(), getItemViewType(), getItemId()
CsetAdapter(), setLayoutManager(), addItem()
DonStart(), onResume(), onStop()
Lời giải
Để tạo một RecyclerView.Adapter hiệu quả, bạn cần biết ba phương thức quan trọng. Đầu tiên, bạn cần tạo ra một ViewHolder mới bằng cách sử dụng phương thức onCreateViewHolder(). Phương thức này sẽ được gọi khi RecyclerView cần tạo một item mới. Sau đó, bạn cần sử dụng phương thức onBindViewHolder() để liên kết dữ liệu với View của item. Cuối cùng, bạn cần trả về số lượng item trong RecyclerView bằng phương thức getItemCount(). Những phương thức này là bắt buộc và cần được thực hiện để đảm bảo hoạt động đúng của RecyclerView.
Mở trang câu hỏi này →
Aandroid:placeholder
Bandroid:caption
Candroid:hint
Dandroid:label
Lời giải
Để đặt một gợi ý bên trong trường nhập liệu EditText, bạn cần sử dụng thuộc tính XML android:hint. Thuộc tính này cho phép bạn thêm một gợi ý hoặc hướng dẫn cho người dùng khi họ đang nhập dữ liệu vào trường này. Ví dụ, nếu bạn muốn thêm một gợi ý cho trường nhập liệu tên, bạn có thể sử dụng android:hint="Tên của bạn". Điều này sẽ giúp người dùng hiểu rõ hơn về dữ liệu mà họ cần nhập vào.
Mở trang câu hỏi này →
ATo attach a new View to RecyclerView.
BTo create a new ViewHolder for an item.
CTo bind data at a specific position to its ViewHolder.
DTo remove an item from the list.
Lời giải
Mục đích của phương thức onBindViewHolder() trong Adapter là liên kết dữ liệu tại một vị trí cụ thể với ViewHolder tương ứng. Phương thức này được gọi khi Adapter cần cập nhật dữ liệu cho một item trong danh sách. Trong phương thức này, bạn có thể sử dụng dữ liệu từ danh sách để cập nhật nội dung của item, chẳng hạn như tên, ảnh, mô tả, v.v. Việc liên kết dữ liệu này giúp đảm bảo rằng dữ liệu luôn được cập nhật và chính xác, ngay cả khi danh sách thay đổi. Ngoài ra, phương thức này cũng giúp giảm thiểu việc tạo mới ViewHolder không cần thiết, từ đó cải thiện hiệu suất của ứng dụng.
Mở trang câu hỏi này →
ACall the map.setMyLocationEnabled(true); method after ensuring you have the required permissions in your manifest.
BUse the LocationManager service to fetch the user's location and manually place a marker on the map.
CModify the application's theme in styles.xml to include a map view.
DThere is no need to do anything; Google Maps automatically displays the user's current location if permissions are granted.
Lời giải

Để hiển thị chính xác vị trí hiện tại của người dùng trên bản đồ, bạn cần thực hiện các bước sau. Trước hết, bạn cần đảm bảo đã thêm các quyền cần thiết vào file AndroidManifest.xml. Sau đó, bạn cần gọi phương thức map.setMyLocationEnabled(true); để kích hoạt tính năng hiển thị vị trí hiện tại. Phương thức này sẽ sử dụng các quyền đã được thêm vào để truy cập vị trí hiện tại của người dùng và hiển thị nó trên bản đồ. Điều này giúp người dùng dễ dàng tìm hiểu vị trí của mình và có thể di chuyển đến vị trí đó.

Mở trang câu hỏi này →
Amap.addLine()
Bmap.drawPath()
Cmap.addPolyline()
Dmap.createRoute()
Lời giải
Để vẽ một đường cong giữa ba thành phố: Lincoln, Los Angeles và New York, nhà phát triển sử dụng phương pháp nào? Câu trả lời đúng là map.addPolyline(). Phương pháp này cho phép vẽ một đường cong bằng nhiều điểm trên bản đồ. Trong ví dụ này, đường cong được vẽ giữa ba thành phố, vì vậy phương pháp phù hợp nhất là map.addPolyline(). Phương pháp này thường được sử dụng để vẽ các tuyến đường, đường đi hoặc các đường cong phức tạp trên bản đồ.
Mở trang câu hỏi này →