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

204/271 câuCòn 67
AIn MVC, the Controller updates the View directly, while in MVP, the View is updated through the Presenter using interfaces.
BMVC does not support user input directly, while MVP is designed to handle user input through the Presenter.
CIn MVC, the Model updates the View directly, while in MVP, the Model updates the View through the Presenter.
DMVC is used exclusively for web applications, while MVP is used for both web and mobile applications.
Lời giải
MVC (Model-View-Controller) và MVP (Model-View-Presenter) là hai mô hình kiến trúc phổ biến trong lập trình. Mô hình MVC thường được sử dụng trong các ứng dụng web, trong đó Controller cập nhật View trực tiếp. Ngược lại, mô hình MVP sử dụng Presenter để cập nhật View thông qua các giao diện. Điều này giúp tách biệt logic kinh doanh và giao diện người dùng, tạo điều kiện thuận lợi cho việc bảo trì và mở rộng ứng dụng. Trong khi đó, MVP được thiết kế để hỗ trợ xử lý đầu vào từ người dùng thông qua Presenter, giúp tăng cường khả năng tương tác của ứng dụng.
Mở trang câu hỏi này →
ATo initialize the BroadcastReceiver
BTo handle the broadcast message
CTo send a broadcast message
DTo unregister the BroadcastReceiver
Lời giải
Trong lập trình Android, BroadcastReceiver là một lớp giúp ứng dụng nhận và xử lý các tin nhắn broadcast từ hệ điều hành. Phương thức onReceive() đóng vai trò quan trọng trong lớp BroadcastReceiver này. Nó được gọi khi ứng dụng nhận được một tin nhắn broadcast từ hệ điều hành. Trong phương thức này, bạn có thể thực hiện các hành động cần thiết để xử lý tin nhắn broadcast, chẳng hạn như cập nhật giao diện người dùng, thực hiện các tác vụ nền, v.v. Mục đích chính của phương thức onReceive() là xử lý tin nhắn broadcast một cách nhanh chóng và hiệu quả, giúp ứng dụng phản ứng kịp thời với các sự kiện hệ thống.
Mở trang câu hỏi này →
Aimplements onBind, onUnbind, onRebind, onCreate, onDestroy methods
Bimplements onStartCommand, onBind, onUnbind, onRebind methods
Cimplements onStartCommand, onBind, onUnbind, onRebind, onCreate, onDestroy methods
Dimplements onCreate, onDestroy methods
Lời giải
Để phát triển một dịch vụ riêng trên Android, bạn cần thực hiện các bước sau. Bước 1: mở rộng lớp Service. Bước 2: bạn cần thực hiện các phương thức sau: onStartCommand, onBind, onUnbind, onRebind, onCreate, onDestroy. Phương thức onStartCommand được gọi khi dịch vụ được bắt đầu, onBind được gọi khi ứng dụng muốn kết nối với dịch vụ, onUnbind và onRebind được gọi khi ứng dụng kết nối và ngắt kết nối với dịch vụ, onCreate được gọi khi dịch vụ được tạo và onDestroy được gọi khi dịch vụ bị hủy. Những phương thức này giúp bạn quản lý và điều khiển dịch vụ của mình một cách hiệu quả.
Mở trang câu hỏi này →
ARetrofit retrofit = new Retrofit(); MyApiEndpointInterface api = retrofit.create(MyApiEndpointInterface.class);
BRetrofit retrofit = Retrofit.create(); MyApiEndpointInterface api = retrofit.newInstance(MyApiEndpointInterface.class);
CRetrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build(); MyApiEndpointInterface api = retrofit.create(MyApiEndpointInterface.class);
DRetrofit retrofit = Retrofit.newInstance(BASE_URL); MyApiEndpointInterface api = retrofit.createInstance(MyApiEndpointInterface.class);
Lời giải

Để tạo một instance của một interface Retrofit API, bạn cần sử dụng một cách cụ thể. Đầu tiên, bạn cần tạo một đối tượng Retrofit Builder bằng cách sử dụng phương thức new. Sau đó, bạn cần thêm baseUrl và converter factory vào đối tượng này. Cuối cùng, bạn có thể tạo instance của interface Retrofit API bằng phương thức create(). Ví dụ, bạn có thể sử dụng đoạn mã sau: Retrofit retrofit =

Lời giải
new Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build();

MyApiEndpointInterface api =

Lời giải
retrofit.create(MyApiEndpointInterface.class);
Mở trang câu hỏi này →
A@Path is used to insert values into the URL path, while @Query is used to add parameters to the URL's query string.
B@Path encrypts data before sending, whereas @Query sends data in plain text.
C@Path is used for POST requests, and @Query is used for GET requests.
D@Path and @Query serve the same purpose and can be used interchangeably.
Lời giải
Trong Retrofit, @Path và @Query là hai loại annotation khác nhau được sử dụng để tạo ra các API endpoint. @Path được sử dụng để chèn giá trị vào phần đường dẫn URL, trong khi @Query được sử dụng để thêm tham số vào phần query string của URL. Ví dụ, nếu bạn muốn tạo một API endpoint để lấy dữ liệu theo id, bạn có thể sử dụng @Path để chèn id vào phần đường dẫn URL. Ngược lại, nếu bạn muốn thêm một tham số query string vào URL, bạn có thể sử dụng @Query. Điều này giúp bạn tạo ra các API endpoint linh hoạt và dễ dàng sử dụng. Ngoài ra, @Path và @Query cũng giúp bạn phân biệt giữa các phương thức HTTP khác nhau, chẳng hạn như GET và POST.
Mở trang câu hỏi này →
ATo animate the camera's movement.
BTo instantly move the camera to a new position.
CTo add items to the map.
DTo change the map's type.
Lời giải
Phương thức GoogleMap.moveCamera() được sử dụng để di chuyển camera trên bản đồ. Nó cho phép bạn di chuyển camera đến một vị trí mới mà không cần phải sử dụng animation. Điều này có nghĩa là camera sẽ di chuyển đến vị trí mới một cách nhanh chóng và trực tiếp, mà không có bất kỳ hiệu ứng animation nào. Phương thức này rất hữu ích khi bạn cần di chuyển camera đến một vị trí cụ thể trên bản đồ, chẳng hạn như khi bạn muốn hiển thị một điểm quan trọng trên bản đồ.
Mở trang câu hỏi này →
ALinux Kernel
BAndroid
CLibraries
DActivities
Lời giải
Cấu trúc kiến trúc nền tảng Android được xây dựng trên nhiều lớp khác nhau. Lớp dưới cùng của kiến trúc này là Linux Kernel. Đây là lớp cơ sở hạ tầng của hệ điều hành Android, chịu trách nhiệm quản lý các tài nguyên hệ thống, quản lý bộ nhớ, xử lý các yêu cầu từ các ứng dụng và cung cấp các dịch vụ cơ bản như quản lý file, mạng, v.v. Linux Kernel đóng vai trò quan trọng trong việc đảm bảo tính ổn định và bảo mật của hệ điều hành Android.
Mở trang câu hỏi này →
AContent provider is not a local database and SQLite is a local database.
BContent provider is faster that SQLite.
CContent provider can share data with other application but SQLite cannot.
DSQLite can share data with other application but content provider cannot
Lời giải
Nhiệm vụ chính của SQLite và Content Provider là lưu trữ và quản lý dữ liệu trong ứng dụng di động. SQLite là một cơ sở dữ liệu địa phương, được tích hợp trực tiếp vào ứng dụng và cho phép lưu trữ dữ liệu trong một tệp tin duy nhất. Trong khi đó, Content Provider là một lớp trừu tượng cho phép các ứng dụng khác truy cập và sử dụng dữ liệu của ứng dụng khác. Điều này cho phép chia sẻ dữ liệu giữa các ứng dụng khác nhau, tạo điều kiện thuận lợi cho việc chia sẻ dữ liệu giữa các ứng dụng khác nhau. Do đó, Content Provider có thể chia sẻ dữ liệu với các ứng dụng khác nhưng SQLite không thể.
Mở trang câu hỏi này →
Ahttp://provider_name/table_name
Bcontent://authority/path/id
Cprovider://database_name/table_name
Ddatabase://authority/data_type
Lời giải
Để truy cập dữ liệu từ một Content Provider, chúng ta thường sử dụng URI (Uniform Resource Identifier) theo một định dạng cụ thể. Có bốn lựa chọn URI khác nhau được đề cập trong câu hỏi. Lựa chọn đầu tiên là http://provider_name/table_name, nhưng điều này không phải là định dạng URI chuẩn cho Content Provider. Lựa chọn thứ hai là content://authority/path/id, đây là định dạng URI được sử dụng phổ biến để truy cập dữ liệu từ Content Provider. Lựa chọn thứ ba là provider://database_name/table_name, nhưng nó không phải là định dạng URI chuẩn. Lựa chọn thứ tư là database://authority/data_type, đây cũng không phải là định dạng URI chuẩn cho Content Provider. Vì vậy, đáp án đúng cho câu hỏi này là content://authority/path/id.
Mở trang câu hỏi này →
AsendBroadcast(intent);
BstartBroadcast(intent);
CregisterBroadcast(intent);
DsendBroadcastReceiver(intent);
Lời giải
Để gửi một sự kiện phát sóng, chúng ta cần sử dụng phương thức sendBroadcast(intent);. Phương thức này cho phép gửi một thông điệp đến tất cả các ứng dụng đã đăng ký nhận sự kiện phát sóng. Khi sử dụng sendBroadcast(intent);, chúng ta cần truyền vào tham số intent, đó là đối tượng chứa thông tin về sự kiện phát sóng. Đối tượng intent này sẽ được gửi đến các ứng dụng đã đăng ký nhận sự kiện phát sóng, và các ứng dụng này sẽ thực hiện các hành động phù hợp dựa trên thông tin trong đối tượng intent.
Mở trang câu hỏi này →
AServerSocket.create()
Bnew ServerSocket(PORT)
CSocketServer(PORT)
Dnew SocketServer()
Lời giải
Để tạo một socket server trên Android, bạn cần sử dụng lớp ServerSocket. Phương thức được sử dụng để tạo một socket server là new ServerSocket(PORT), nơi PORT là số cổng mà socket server sẽ lắng nghe. Đây là cách phổ biến và được khuyến nghị để tạo một socket server trên Android.
Mở trang câu hỏi này →
A<Button />
B<InputButton />
C<ImageButton />
D<SubmitButton />
Lời giải

Để thêm một nút vào một layout, bạn cần sử dụng thẻ XML nào trong tệp layout? Thẻ XML đó là <Button />. Thẻ này cho phép bạn thêm một nút vào layout của ứng dụng Android. Bạn có thể đặt tên cho nút, thêm biểu tượng, màu sắc và các thuộc tính khác để tùy chỉnh nút theo ý muốn. Ngoài ra, bạn cũng có thể thêm các sự kiện vào nút để thực hiện các hành động khi nút được nhấn. Ví dụ, bạn có thể thêm một sự kiện để thực hiện một hành động khi nút được nhấn.

Mở trang câu hỏi này →
Aandroid:padding
Bandroid:paddingTop
Candroid:paddingStart
Dandroid:paddingLeft
Eandroid:paddingRight
Fandroid:paddingEnd
Lời giải
Để đặt khoảng cách ở đầu của view, trong đơn vị pixel, đặc biệt phù hợp với các view dài và hẹp, bạn có thể sử dụng thuộc tính android:paddingStart. Điều này giúp bạn có thể dễ dàng điều chỉnh khoảng cách mà không cần phải sử dụng các thuộc tính khác như android:padding, android:paddingTop, android:paddingLeft, android:paddingRight, android:paddingEnd.
Mở trang câu hỏi này →
AIn the activity_main.xml layout file.
BIn the MainActivity.java (or Kotlin equivalent) file.
CIn the AndroidManifest.xml file within the <application> tag.
DIn the styles.xml file.
Lời giải
Để chỉ định một chủ đề đã định nghĩa (ví dụ: Theme.AppCompat.Light.DarkActionBar) cho ứng dụng của bạn, bạn cần xác định vị trí trong dự án của mình. Chủ đề này sẽ được áp dụng cho toàn bộ ứng dụng. Bạn không nên chỉ định chủ đề trong file layout (activity_main.xml) vì nó chỉ áp dụng cho một màn hình cụ thể. Trong file MainActivity.java (hoặc phiên bản Kotlin tương đương), bạn chỉ định chủ đề cho một hoạt động cụ thể, nhưng không phải cho toàn bộ ứng dụng. Trong file AndroidManifest.xml, bạn chỉ định các thông tin chung về ứng dụng, nhưng không phải là chủ đề. Vì vậy, vị trí phù hợp để chỉ định chủ đề là trong file styles.xml, nơi bạn có thể định nghĩa và áp dụng chủ đề cho toàn bộ ứng dụng.
Mở trang câu hỏi này →
AFrameLayout
BLinearLayout
CRelativeLayout
DConstraintLayout
Lời giải
Để tạo một layout với hai nút button nằm cạnh nhau, chúng ta nên sử dụng ViewGroup LinearLayout. LinearLayout cho phép chúng ta sắp xếp các view theo chiều dọc hoặc chiều ngang. Trong trường hợp này, chúng ta muốn hai nút button nằm cạnh nhau theo chiều ngang, vì vậy LinearLayout là lựa chọn phù hợp.
Mở trang câu hỏi này →
AFragments cannot exist without an Activity
BFragments do not have a lifecycle
CFragments are used for background processing
DActivities are used to define UI
Lời giải
Một Fragment và một Activity là hai khái niệm cơ bản trong Android. Fragment là một phần của Activity, có thể được sử dụng để chia nhỏ một Activity thành các phần nhỏ hơn. Điều này giúp tạo ra các ứng dụng phức tạp hơn mà vẫn dễ dàng sử dụng. Fragment không thể tồn tại độc lập mà phải được thêm vào một Activity để hoạt động. Điều này khác với Activity, là một đơn vị độc lập trong ứng dụng Android, có thể được sử dụng để tạo ra các màn hình khác nhau của ứng dụng. Fragment không phải là một đơn vị độc lập như Activity, mà là một phần của Activity. Vì vậy, Fragment không thể tồn tại mà không có một Activity.
Mở trang câu hỏi này →
Aa[2:2] = []
Ba[2] = []
Cdel a[2]
Da.remove(3)
Lời giải
Để chọn 2 câu trả lời đúng, chúng ta cần hiểu cách xóa phần tử trung tâm trong danh sách a. Câu trả lời đúng là "del a[2]" và "a.remove(3)". Câu "del a[2]" sử dụng phương thức del để xóa phần tử có chỉ số 2 trong danh sách a, trong khi "a.remove(3)" sử dụng phương thức remove để xóa phần tử có giá trị 3. Cả hai phương thức này đều có thể xóa phần tử trung tâm 3, làm cho danh sách a trở thành [1, 2, 4, 5].
Mở trang câu hỏi này →
A@Override protected void onHandleIntent(Intent intent) { ... }
B@Override protected void onStartCommand(Intent intent) { ... }
C@Override protected void onCreate(Intent intent) { ... }
D@Override protected void onDestroy(Intent intent) { ... }
Lời giải
Để xử lý các mục đích trong một IntentService, bạn cần sử dụng phương thức onHandleIntent(). Phương thức này được gọi khi IntentService nhận được một Intent mới. Trong phương thức này, bạn có thể thực hiện các hành động cần thiết để xử lý mục đích. Ví dụ, bạn có thể gọi các phương thức của API, thực hiện các tác vụ nền, hoặc gửi thông báo đến người dùng. Phương thức onHandleIntent() được gọi trên một luồng riêng biệt, vì vậy bạn có thể thực hiện các tác vụ tốn thời gian mà không ảnh hưởng đến luồng chính của ứng dụng.
Mở trang câu hỏi này →
203What is an Android Service used for?4 lựa chọn
ATo perform long-running operations in the background
BTo manage UI components
CTo store data persistently
DTo make network requests
Lời giải
Một dịch vụ Android (Android Service) là một thành phần quan trọng trong hệ điều hành Android, được sử dụng để thực hiện các tác vụ chạy nền (background tasks) trong ứng dụng. Dịch vụ Android cho phép ứng dụng thực hiện các hoạt động phức tạp và thời gian dài mà không cần phải tương tác với giao diện người dùng (UI). Điều này giúp ứng dụng trở nên hiệu quả hơn và không bị gián đoạn khi thực hiện các tác vụ chạy nền. Ví dụ, một ứng dụng có thể sử dụng dịch vụ Android để tải dữ liệu từ internet, thực hiện các tính toán phức tạp hoặc cập nhật dữ liệu trên cơ sở dữ liệu.
Mở trang câu hỏi này →
AImplicit Intent
BExplicit Intent
CBroadcast Intent
DSticky Intent
Lời giải
Trong lập trình di động, có hai loại ý định (intent) chính: ý định ẩn (implicit intent) và ý định rõ ràng (explicit intent). Ý định rõ ràng là loại ý định được chỉ định rõ ràng bởi tên của thành phần mục tiêu. Điều này có nghĩa là khi bạn muốn thực hiện một hành động cụ thể, chẳng hạn như gọi một ứng dụng khác hoặc mở một trang web, bạn sẽ sử dụng một intent rõ ràng để chỉ định rõ ràng hành động đó. Ví dụ, nếu bạn muốn mở ứng dụng Google Maps, bạn sẽ sử dụng một intent rõ ràng để chỉ định ứng dụng Google Maps là thành phần mục tiêu. Ý định rõ ràng giúp cho việc giao tiếp giữa các ứng dụng trở nên dễ dàng và rõ ràng hơn.
Mở trang câu hỏi này →