google associate-android-developer online test
Associate Android Developer
What students need to know about the associate-android-developer exam
- Total 128 Questions & Answers
Question 1
Topic 1, KOTLIN only
Topic 1
What is a correct part of an Implicit Intent for sharing data implementation?
-
A. val sendIntent = Intent(this, UploadService::class.java).apply { putExtra(Intent.EXTRA_TEXT, textMessage) ...
-
B. val sendIntent = Intent().apply { type = Intent.ACTION_SEND; ...
-
C. val sendIntent = Intent(this, UploadService::class.java).apply { data = Uri.parse(fileUrl) ...
-
D. val sendIntent = Intent().apply { action = Intent.ACTION_SEND ...
Answer:
D
Explanation:
Create the text message with a string
val sendIntent = Intent().apply { action = Intent.ACTION_SEND putExtra(Intent.EXTRA_TEXT, textMessage) type =
"text/plain" }
Reference: https://developer.android.com/guide/components/fundamentals
Question 2
Topic 1, KOTLIN only
Topic 1
By default, the notification's text content is truncated to fit one line. If you want your notification to be longer, for example, to
create a larger text area, you can do it in this way:
-
A. var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setContentText("Much longer text that cannot fit one line...") .setStyle(NotificationCompat.BigTextStyle() .bigText("Much longer text that cannot fit one line...")) ...
-
B. var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setContentText("Much longer text that cannot fit one line...") .setLongText("Much longer text that cannot fit one line...")) ...
-
C. var builder = NotificationCompat.Builder(this, CHANNEL_ID) .setContentText("Much longer text that cannot fit one line...") .setTheme(android.R.style.Theme_LongText); ...
Answer:
A
Explanation:
Reference:
https://developer.android.com/training/notify-user/build-notification
Question 3
Topic 1, KOTLIN only
Topic 1
Select correct demonstration of WorkRequest cancellation.
-
A. workManager.enqueue(OneTimeWorkRequest.Builder(FooWorker::class.java).build())
-
B. val request: WorkRequest = OneTimeWorkRequest.Builder(FooWorker::class.java).build() workManager.enqueue(request) val status = workManager.getWorkInfoByIdLiveData(request.id) status.observe(...)
-
C. val request: WorkRequest = OneTimeWorkRequest.Builder(FooWorker::class.java).build() workManager.enqueue(request) workManager.cancelWorkById(request.id)
-
D. val request1: WorkRequest = OneTimeWorkRequest.Builder(FooWorker::class.java).build() val request2: WorkRequest = OneTimeWorkRequest.Builder(BarWorker::class.java).build() val request3: WorkRequest = OneTimeWorkRequest.Builder(BazWorker::class.java).build() workManager.beginWith(request1, request2).then(request3).enqueue()
-
E. val request: WorkRequest = OneTimeWorkRequest.Builder(FooWorker::class.java).build() workManager.enqueue(request) workManager.cancelWork(request)
Answer:
C
Explanation:
Videos:
Working with WorkManager, from the 2018 Android Dev Summit

WorkManager: Beyond the basics, from the 2019 Android Dev Summit

Reference: https://developer.android.com/reference/androidx/work/WorkManager?hl=en
Question 4
Topic 1, KOTLIN only
Topic 1
In general, you should send an AccessibilityEvent whenever the content of your custom view changes. For example, if you
are implementing a custom slider bar that allows a user to select a numeric value by pressing the left or right arrows, your
custom view should emit an event of type TYPE_VIEW_TEXT_CHANGED whenever the slider value changes. Which one of
the following sample codes demonstrates the use of the sendAccessibilityEvent() method to report this event.
-
A. override fun dispatchPopulateAccessibilityEvent(event: AccessibilityEvent): Boolean { return super.dispatchPopulateAccessibilityEvent(event).let { completed -> if (text?.isNotEmpty() == true) { event.text.add(text) true } else { completed
-
B. override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_DPAD_LEFT -> { currentValue-- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) true ...
-
C. override fun onKeyUp(keyCode: Int, event: KeyEvent): Boolean { return when(keyCode) { KeyEvent.KEYCODE_ENTER -> { currentValue-- sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CONTEXT_CLICKED) true ...
Answer:
B
Explanation:
Reference: https://developer.android.com/guide/topics/ui/accessibility/custom-views
Question 5
Topic 1, KOTLIN only
Topic 1
The easiest way of adding menu items (to specify the options menu for an activity) is inflating an XML file into the Menu via
MenuInflater. With menu_main.xml we can do it in this way:
-
A. override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return true
-
B. override fun onOptionsItemSelected(item: MenuItem): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return super.onOptionsItemSelected(item) }
-
C. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.menu.menu_main) }
Answer:
A
Explanation:
Reference: https://developer.android.com/guide/topics/ui/accessibility/custom-views
Question 6
Topic 1, KOTLIN only
Topic 1
Android Tests. You can use the childSelector() method to nest multiple UiSelector instances. For example, the following
code example shows how your test might specify a search to find the first ListView in the currently displayed UI, then search
within that ListView to find a UI element with the text property Apps. What is the correct sample?
-
A. val appItem: UiObject = device.findObject( UiSelector().className(ListView.class) .instance(1) .childSelector( UiSelector().text("Apps")
-
B. val appItem: UiObject = device.findObject( UiSelector().className("android.widget.ListView") .instance(0) .childSelector( UiSelector().text("Apps")
-
C. val appItem: UiObject = device.findObject( UiSelector().className("android.widget.ListView") .instance( UiSelector().text("Apps")
Answer:
B
Question 7
Topic 1, KOTLIN only
Topic 1
The following code snippet shows an example of an Espresso test:
-
A. @Rule fun greeterSaysHello() { onView(withId(R.id.name_field)).do(typeText("Steve")) onView(withId(R.id.greet_button)).do(click()) onView(withText("Hello Steve!")).check(matches(isDisplayed())) }
-
B. @Test fun greeterSaysHello() { onView(withId(R.id.name_field)).perform(typeText("Steve")) onView(withId(R.id.greet_button)).perform(click()) onView(withText("Hello Steve!")).check(matches(isDisplayed())) }
-
C. @Test fun greeterSaysHello() { onView(withId(R.id.name_field)).do(typeText("Steve")) onView(withId(R.id.greet_button)).do(click()) onView(withText("Hello Steve!")).compare(matches(isDisplayed())) }
Answer:
B
Question 8
Topic 1, KOTLIN only
Topic 1
As an example. In an Activity we have our TimerViewModel object (extended ViewModel), named mTimerViewModel.
mTimerViewModel.timer method returns a LiveData value. What can be a correct way to set an observer to change UI in
case if data was changed?
-
A. mTimerViewModel!!.timer.value.toString().observe (Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) })
-
B. mTimerViewModel!!.timer.observe (this, Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) })
-
C. mTimerViewModel.observe (Observer { aLong -> callAnyChangeUIMethodHere(aLong!!) })
Answer:
B
Question 9
Topic 1, KOTLIN only
Topic 1
LiveData.postValue() and LiveData.setValue() methods have some differences. So if you have a following code executed in
the main thread:
liveData.postValue("a"); liveData.setValue("b");
What will be the correct statement?
-
A. The value "b" would be set at first and later the main thread would override it with the value "a".
-
B. The value "a" would be set at first and later the main thread would override it with the value "b".
-
C. The value "b" would be set at first and would not be overridden with the value "a".
-
D. The value "a" would be set at first and would not be overridden with the value "b".
Answer:
B
Question 10
Topic 1, KOTLIN only
Topic 1
In our TeaViewModel class, that extends ViewModel, we have such prorerty: val tea: LiveData
An observer in our Activity (type of mViewModel variable in example is TeaViewModel) is set in this way:
mViewModel!!.tea.observe(this, Observer { tea: Tea? -> displayTea(tea) })
What will be a correct displayTea method definition?
-
A. private fun displayTea()
-
B. private fun displayTea(tea: Tea?)
-
D. private fun displayTea(tea: LiveData?)
Answer:
B