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

124/271 câuCòn 147
AIt performs optimizations for intra-app communication by ensuring intents don't cross process boundaries
BIt enhances app security by ensuring intents can't be sent or received by components in other apps
CIt allows broadcast receivers to run in the background performing long-running operations and/or accessing remote resources
DIt uses the Activity Manager Service to efficiently route intents to zero or more components
Lời giải
LocalBroadcastManager là một lớp trong Android giúp thực hiện giao tiếp giữa các thành phần trong cùng một ứng dụng. Nó thực hiện các tối ưu hóa cho giao tiếp nội bộ ứng dụng bằng cách đảm bảo các intent không vượt quá ranh giới quy trình. Điều này giúp tăng hiệu suất và giảm thiểu các vấn đề liên quan đến giao tiếp giữa các quy trình khác nhau. Ngoài ra, LocalBroadcastManager cũng giúp tăng cường bảo mật ứng dụng bằng cách đảm bảo các intent chỉ có thể được gửi và nhận bởi các thành phần trong cùng một ứng dụng, ngăn chặn các hành vi không mong muốn từ các ứng dụng khác.
Mở trang câu hỏi này →
A@Query
B@Insert
C@Delete
D@Update
E@Select
Lời giải
Các thành phần kiến trúc Android cung cấp một số chú thích thuận tiện cho DAOs. Các chú thích này giúp chúng ta dễ dàng thực hiện các phương thức CRUD (Tạo, Đọc, Cập nhật, Xóa) trên cơ sở dữ liệu. Trong số các lựa chọn trên, có 4 chú thích được sử dụng để thực hiện các phương thức CRUD: @Query, @Insert, @Delete, @Update. @Query được sử dụng để thực hiện các truy vấn phức tạp trên cơ sở dữ liệu, @Insert được sử dụng để thêm mới dữ liệu vào cơ sở dữ liệu, @Delete được sử dụng để xóa dữ liệu khỏi cơ sở dữ liệu, @Update được sử dụng để cập nhật dữ liệu trong cơ sở dữ liệu. @Select không phải là một trong những chú thích được cung cấp bởi các thành phần kiến trúc Android.
Mở trang câu hỏi này →
APicasso
BRetrofit
CVolley
DGlide
Lời giải
Để hiển thị một hình ảnh từ internet, chúng ta có thể sử dụng các thư viện sau: Picasso, Glide. Đây là hai thư viện phổ biến và được sử dụng rộng rãi trong lập trình di động. Picasso là một thư viện mạnh mẽ cho phép bạn tải và hiển thị hình ảnh từ internet một cách dễ dàng. Nó cũng cung cấp các tính năng như tải hình ảnh trong nền, hiển thị hình ảnh với kích thước tùy chỉnh, v.v. Glide cũng là một thư viện phổ biến cho việc hiển thị hình ảnh từ internet. Nó được thiết kế để hoạt động hiệu quả và tiết kiệm tài nguyên, đồng thời cung cấp các tính năng như tải hình ảnh trong nền, hiển thị hình ảnh với kích thước tùy chỉnh, v.v. Cả hai thư viện đều có thể giúp bạn hiển thị hình ảnh từ internet một cách dễ dàng và hiệu quả.
Mở trang câu hỏi này →
AIt allows buffering of query results
BIt is efficient since all data needn't be loaded into memory
CIt ensures that query results are right
DIt alleviates the need to explicitly call close() on the Cursor
Lời giải
SQLite query() phương thức trả về một Cursor vì một số lý do sau đây. Trước hết, nó cho phép đệm kết quả truy vấn, giúp giảm thiểu việc truy cập cơ sở dữ liệu nhiều lần. Điều này đặc biệt hữu ích khi xử lý dữ liệu lớn. Thứ hai, nó giúp tăng hiệu suất vì không cần phải tải toàn bộ dữ liệu vào bộ nhớ. Điều này giúp giảm thiểu việc sử dụng tài nguyên hệ thống và tăng tốc độ xử lý. Cuối cùng, nó giúp giảm thiểu việc phải gọi thủ công phương thức close() trên Cursor, giúp giảm thiểu việc lãng phí tài nguyên hệ thống.
Mở trang câu hỏi này →
AThe project is easier to maintain.
BThe project is easier to do unit test.
CThe project is easier to understand.
DThe project is easier to run.
Lời giải
MVP (Model-View-Presenter) và MVVM (Model-View-ViewModel) là hai mô hình kiến trúc phổ biến trong lập trình ứng dụng. Các lợi ích chính của việc sử dụng MVP/MVVM bao gồm: dự án dễ dàng bảo trì hơn. Điều này là vì mô hình kiến trúc này giúp tách biệt rõ ràng giữa logic kinh doanh và giao diện người dùng, làm cho việc sửa lỗi và cập nhật trở nên dễ dàng hơn. Ngoài ra, dự án cũng dễ dàng thực hiện các bài kiểm tra đơn vị hơn. Điều này là vì mô hình kiến trúc này giúp tạo ra các lớp mô hình độc lập, dễ dàng kiểm tra và thử nghiệm.
Mở trang câu hỏi này →
AminSdkVersion
BcompileSdkVersion
CtargetSdkVersion
DtestSdkVersion
Lời giải
Số phiên bản API Android mà Gradle nên sử dụng để biên dịch ứng dụng của bạn được xác định bởi tham số nào? Trong quá trình xây dựng ứng dụng Android, Gradle sử dụng các tham số khác nhau để xác định các phiên bản API Android khác nhau. - minSdkVersion: Xác định phiên bản API Android thấp nhất mà ứng dụng của bạn có thể chạy trên đó. - compileSdkVersion: Xác định phiên bản API Android mà Gradle sử dụng để biên dịch ứng dụng của bạn. - targetSdkVersion: Xác định phiên bản API Android mà ứng dụng của bạn được thiết kế để chạy trên đó. - testSdkVersion: Không phải là một tham số thực tế trong quá trình xây dựng ứng dụng Android. Vì vậy, tham số xác định phiên bản API Android mà Gradle nên sử dụng để biên dịch ứng dụng của bạn là compileSdkVersion.
Mở trang câu hỏi này →
ALog message is used to debug a program
BSame as printf()
CSame as Toast()
DNone of the others
Lời giải
Trong Android Studio, cửa sổ Logcat là một công cụ quan trọng giúp các lập trình viên debug và tìm lỗi trong ứng dụng Android của mình. Logcat cho phép bạn xem và quản lý các thông điệp log được tạo ra bởi ứng dụng, giúp bạn xác định và giải quyết các vấn đề kỹ thuật. Khi bạn chạy ứng dụng trên thiết bị hoặc emulator, Logcat sẽ hiển thị các thông điệp log được tạo ra bởi ứng dụng, bao gồm cả thông điệp lỗi và thông điệp thông báo. Điều này cho phép bạn dễ dàng tìm kiếm và giải quyết các vấn đề kỹ thuật trong ứng dụng của mình.
Mở trang câu hỏi này →
AThe second Activity is added as a Java class. You still need to add the XML layout file.
BThe second Activity XML layout file is created and a Java class added. You still need to define the class signature.
CThe second Activity is added as a Java class, the XML layout file is created, and the AndroidManifest.xml file is changed to declare a second Activity.
DThe second Activity XML layout file is created, and the AndroidManifest.xml file is changed to declare a second Activity.
Lời giải
Khi bạn thêm một Activity thứ hai vào ứng dụng bằng cách chọn File > New > Activity và một mẫu Activity, các thay đổi sau sẽ được thực hiện. Thứ nhất, một Activity mới sẽ được thêm vào ứng dụng dưới dạng một lớp Java. Thứ hai, một tệp XML layout mới sẽ được tạo để chứa thiết kế giao diện người dùng của Activity mới. Cuối cùng, tệp AndroidManifest.xml sẽ được thay đổi để khai báo Activity mới này. Điều này cho phép hệ thống Android biết về sự tồn tại của Activity mới và có thể chuyển hướng đến nó khi cần thiết.
Mở trang câu hỏi này →
113When is activity paused?4 lựa chọn
AIf activity is at background and still visible
BIf activity is not visible
CIf the activity is at foreground and visible
DIf the activity is at foreground
Lời giải
Hoạt động bị tạm dừng khi nào? Hoạt động bị tạm dừng khi nó không còn được hiển thị trên màn hình. Điều này có thể xảy ra khi người dùng chuyển sang hoạt động khác hoặc khi ứng dụng bị đóng. Khi hoạt động không còn được hiển thị, hệ thống sẽ tạm dừng hoạt động đó để tiết kiệm tài nguyên và giảm thiểu việc sử dụng bộ nhớ. Điều này giúp ứng dụng hoạt động hiệu quả hơn và tránh bị quá tải. Ngoài ra, tạm dừng hoạt động cũng giúp ứng dụng có thể được phục hồi lại khi người dùng quay lại ứng dụng.
Mở trang câu hỏi này →
AStorage
BPermission
CDatabase
DBroadcastReceiver
Lời giải
Từ Android 6.0 trở lên, hệ điều hành đã thay đổi cách quản lý quyền truy cập (permission) của ứng dụng. Trước đây, ứng dụng có thể yêu cầu quyền truy cập mà không cần sự cho phép của người dùng. Tuy nhiên, từ Android 6.0, người dùng phải cho phép ứng dụng truy cập vào các quyền cụ thể. Điều này giúp tăng cường bảo mật và quyền riêng tư cho người dùng. Ngoài ra, ứng dụng cũng phải khai báo rõ ràng các quyền mà nó cần để hoạt động. Vì vậy, từ Android 6.0, component quản lý quyền truy cập (Permission) đã thay đổi đáng kể.
Mở trang câu hỏi này →
Asocket.accept()
Bsocket.sendto(address)
Csocket.acceptsocket
Daccept.socket()
Lời giải
Phương thức nào của mô-đun socket cho phép một socket server chấp nhận yêu cầu từ một socket client ở một máy chủ khác?
Mở trang câu hỏi này →
AAn event handler that responds to broadcast announcements
BA component that runs in the background to perform long-running operations or access remote resources
CA component that defines a user-facing operation that's displayed on a device screen
DA message that describes an action to perform or an event that has occurred
Lời giải
Một Broadcast Receiver trong Android là một thành phần chạy nền (background component) có thể nhận và phản hồi các thông báo (broadcast announcements) từ hệ điều hành hoặc các ứng dụng khác. Nó có thể thực hiện các tác vụ như cập nhật trạng thái, gửi thông báo, hoặc thậm chí điều khiển các thiết bị ngoại vi. Broadcast Receiver có thể được kích hoạt bởi các sự kiện như khởi động ứng dụng, kết nối mạng, hoặc thay đổi trạng thái pin. Nó cũng có thể được sử dụng để gửi thông báo đến các ứng dụng khác trên thiết bị. Trong câu hỏi này, đáp án đúng là 'Một event handler rằng phản hồi các thông báo (broadcast announcements)', vì nó chính xác mô tả chức năng của một Broadcast Receiver trong Android.
Mở trang câu hỏi này →
AWorker thread
BUI thread
CBackground thread
DMain worker
Lời giải
Trong Android, luồng chính (main thread) còn được gọi là luồng giao diện người dùng (UI thread). Luồng này chịu trách nhiệm xử lý các tác vụ liên quan đến giao diện người dùng, chẳng hạn như cập nhật UI, xử lý sự kiện người dùng, v.v. Luồng chính là nơi chạy các mã lệnh của ứng dụng, và nó phải đảm bảo rằng các tác vụ được thực hiện một cách đồng bộ và an toàn. Nếu luồng chính bị chậm hoặc bị treo, nó có thể gây ra các vấn đề về hiệu suất và thậm chí là lỗi ứng dụng.
Mở trang câu hỏi này →
AContent Providers
BDalvik Virtual Machine
CActivities
DServices
Lời giải
Các thành phần của ứng dụng Android là những phần quan trọng giúp tạo nên một ứng dụng hoàn chỉnh. Trong số các lựa chọn dưới đây, có ba thành phần chính của ứng dụng Android. Trước hết, Content Providers là một thành phần giúp cung cấp dữ liệu cho các ứng dụng khác. Tiếp theo, Activities là một thành phần giúp tạo nên giao diện người dùng của ứng dụng. Cuối cùng, Services là một thành phần giúp chạy các tác vụ nền mà không cần phải có sự tương tác trực tiếp từ người dùng. Các thành phần này đều đóng vai trò quan trọng trong việc tạo nên một ứng dụng Android hoàn chỉnh.
Mở trang câu hỏi này →
AThe bulk of these apps are written in C/C++
BThe bulk of these apps are written in Java
CIt's possible to write portions of the apps in C/C++
DThese apps cannot be written in C/C++
Lời giải
Các ứng dụng Android được viết bằng ngôn ngữ lập trình nào? Trả lời câu hỏi này, chúng ta cần xem xét các lựa chọn sau: A. Hầu hết các ứng dụng này được viết bằng C/C++. B. Hầu hết các ứng dụng này được viết bằng Java. C. Có thể viết các phần của ứng dụng bằng C/C++. D. Các ứng dụng này không thể được viết bằng C/C++. Lời giải: Hầu hết các ứng dụng Android được viết bằng Java. Điều này có thể thấy rõ qua các thư viện và framework được sử dụng trong quá trình phát triển ứng dụng Android. Tuy nhiên, cũng có thể viết các phần của ứng dụng bằng C/C++. Điều này được thực hiện thông qua các thư viện như NDK (Native Development Kit) hoặc sử dụng các công cụ khác như CMake. Việc sử dụng C/C++ trong ứng dụng Android cho phép các nhà phát triển tận dụng các tính năng của ngôn ngữ lập trình này, chẳng hạn như hiệu suất cao và khả năng tương tác với các thành phần hardware.
Mở trang câu hỏi này →
APermissions are not specified in AndroidManifest.xml
BThe AndroidManifest.xml is optional.
CThe AndroidManifest.xml must supply a unique Application package name for your App.
DAndroidManifest.xml file is a UI layout file
Lời giải
AndroidManifest.xml là một file quan trọng trong dự án Android. Nó chứa thông tin về ứng dụng, bao gồm tên gói (package name), tên ứng dụng, phiên bản ứng dụng, và các quyền (permissions) cần thiết. Trong đó, quyền (permissions) là một phần quan trọng để ứng dụng có thể truy cập các tính năng của thiết bị. Ví dụ, ứng dụng có thể yêu cầu quyền truy cập camera, microphone, hoặc quyền đọc/ghi file. Ngoài ra, AndroidManifest.xml cũng chứa thông tin về các thành phần của ứng dụng, bao gồm các hoạt động (activities), dịch vụ (services), và broadcast receiver. Mỗi ứng dụng Android đều cần có một file AndroidManifest.xml để xác định các thông tin cơ bản của ứng dụng.
Mở trang câu hỏi này →
AAndroid Framework
BLibraries
CLinux Kernel
DAndroid document
Lời giải
Chọn một thành phần không phải là một phần của kiến trúc Android. Kiến trúc Android bao gồm các thành phần như Android Framework, Libraries và Linux Kernel. Android Framework là bộ khung cơ bản của hệ điều hành Android, Libraries là các thư viện hỗ trợ cho các ứng dụng Android và Linux Kernel là nhân của hệ điều hành Android. Android document là tài liệu hướng dẫn sử dụng và tham khảo cho các nhà phát triển Android, không phải là một thành phần của kiến trúc Android.
Mở trang câu hỏi này →
A<?xml version=""1.0"" encoding=""UTF-8""?> <Orders> <order Id=""001""> <Customer>David & Jason</customer> </Order> </orders>
B<?xml version="1.0" encoding="UTF-8"?> <Orders> <Order Id=001> <Customer>David & Jason</Customer > </Order> </Orders>
C<?xml version="1.0" encoding="UTF-8"?> <Orders> <order Id="001"> <Customer>David & Jason</customer> </Order> </orders>
D<?xml version="1.0" encoding="UTF-8"?> <Order> <Order Id=001> <Customer>David &amp; Jason</Customers> </Order> </Orders>
Lời giải

Vấn đề chính của câu trả lời sai là sự không tuân thủ các quy tắc cơ bản của XML. Trong XML, các thẻ phải được đóng đúng cách và các giá trị phải được bao quanh bởi dấu nháy kép. Câu trả lời sai thứ nhất có thẻ <Order> đóng không đúng cách và giá trị của thẻ <Customer> không được bao quanh bởi dấu nháy kép. Câu trả lời sai thứ hai có thẻ <Order> đóng không đúng cách và giá trị của thẻ <Customer> không được bao quanh bởi dấu nháy kép. Câu trả lời sai thứ ba có thẻ <Order> đóng không đúng cách và giá trị của thẻ <Customer> không được bao quanh bởi dấu nháy kép. Câu trả lời đúng là <?xml version="1.0" encoding="UTF-8"?>

Lời giải
<Order> <Order Id=001> <Customer>David &amp;
Jason</Customer> </Order>

</Order> vì nó tuân thủ các quy tắc cơ bản của XML.

Mở trang câu hỏi này →
Ares/layout
Bres/mipmap
Cres/raw
Dres/values
Lời giải
Chọn thư mục dành cho các tệp XML chứa chuỗi, số nguyên và màu sắc. Thư mục này thường được sử dụng để lưu trữ các giá trị và thuộc tính của ứng dụng. Ví dụ, bạn có thể sử dụng nó để lưu trữ các chuỗi văn bản, số nguyên và màu sắc được sử dụng trong ứng dụng của mình. Trong Android, thư mục này được gọi là 'res/values' và thường được sử dụng để lưu trữ các tệp XML như strings.xml, colors.xml và dimens.xml.
Mở trang câu hỏi này →
ASetOnClickListener
BOnClickListener
CClickListener
DsetButtonClick
Lời giải
Khi một nút được nhấp vào, bạn có thể sử dụng một trong các loại lắng nghe sau để xử lý sự kiện này. Trong lập trình Android, khi muốn thực hiện một hành động nào đó khi một nút được nhấp vào, bạn cần sử dụng một loại lắng nghe gọi là OnClickListener. Đây là một giao diện (interface) được cung cấp bởi Android để giúp bạn xử lý sự kiện nhấp vào của các nút. Để sử dụng OnClickListener, bạn cần tạo một đối tượng của nó và gán nó vào nút của mình thông qua phương thức setOnClickListener().
Mở trang câu hỏi này →