Android test / Тест по Android: 1-40 вопросы

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Что должно быть добавлено в фрагмент кода, чтобы гарантировать вызов onCreateLoader() при создании нового загрузчика (Loader).
Предполагается, что все необходимые библиотеки импортированы.

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// Create and return a new Loader
}
}

имплементировать интерфейс LoaderManager.LoaderCallbacks в классе MainActivity
передавать второй аргумент в метод initLoader(), отличный от null
+ получать ссылку на Loader не в onCreate(), а где-нибудь в другом месте
наследовать (extend) класс MainActivity от LoaderManager
вызвать метод createLoader() вместо initLoader()

flutesa 04.10.13 в 18:26

0

Вы работаете над приложением, производительность которого снижается каждый раз, когда запускается фоновая служба, которую оно использует. Пользовательский интерфейс начинает зависать и почти не откликается, поскольку служба выполняет свою работу.
Почему при запуске службы снижается производительность?

в приложении не заданы необходимые полномочия
+ вся стандартная обработка в Android происходит в единственном потоке
служба вызвала веб-сервис, который система не позволяет вызывать
в приложении не выполнен zipalign
цифровая подпись APK данного приложения недействительна

flutesa 04.10.13 в 18:41

0

Что произойдет, если элемент <application> в AndroidManifest.xml имеет icon, label атрибуты как у дочерней <activity>?

никакое значение не будет использоваться, так как Android не сможет определить приоритетное
значения для <activity> переопределяют значения для <application>
+ сгенерируется ошибка компиляции из-за противоречивых значений
сгенерируется ошибка выполнения из-за противоречивых значений
значения для <activity> всегда игнорируются

flutesa 04.10.13 в 18:49

0

Категория intent (намерения):

описывает тип компонентов, который должен обрабатывать намерение
указывает видимое пользователю описание намерения
назначает фильтры полномочий для намерений в группах, а не одиночно
упорядочивает опции, доступные в контекстном меню селектора действий
+ называет структуру пакета, которому принадлежит целевая деятельность

flutesa 04.10.13 в 19:13

0

"Ваше приложение локализовано для французского языка. То есть в файле res/values-fr-rFR/strings.xml все необходимые значения определены. Тем не менее, вы заметили, что на одном экране приложения метка текстового поля отображается на английском языке." Почему эта метка не отображается по-французски?

файл strings.xml с французским имеет неверный формат xml
файл strings.xml с французским должен быть расположен в res/values-fr-FR, а не в res/values-fr-rFR
пользователь в настройках установил автоматический перевод текстовых меток на английский язык
код, осуществляющий перевод текстовой надписи, некорректно устанавливает французскую версию файла strings.xml в качестве источника данных
+ строка для данной метки отсутствует в файле strings.xml с французским, поэтому используется значение, указанное в файле strings.xml от умолчанию

flutesa 04.10.13 в 19:38

0

"Вы используете класс ListActivity для отображения экрана с одним ListView, из которого пользователь может выбрать пункт. Вы хотите изменить внешний вид этого экрана." Если предположить, что макет определён, какая строка кода позволит задать пользовательский шаблон с именем my_custom_layout?

+ setContentView(R.layout.my_custom_layout);
setLayout(R.layout.my_custom_layout);
defineLayout(R.layout.my_custom_layout);
customContentView("R.layout.my_custom_layout");
setContentView("layout.my_custom_layout");

flutesa 04.10.13 в 19:44

0

Какой метод НЕ относится к жизненному циклу Activity?

onPause()
+ onSaveInstanceState()
onCreate()
onDestroy()
onRestart()

flutesa 04.10.13 в 19:46

0

"Вы написали простой класс, реализующий SQLiteOpenHelper. В этом классе есть методы для различных операций с базой данных, например, создание записи о клиентах. Большинство операций, используют простые execSQL() выражения, но один из них является гораздо сложным и требует псевдонимов столбцов." Который класс удобен для создания более сложных запросов SQL?"

ExtendedQueryBuilder
EnhancedSQLiteQuery
+ SQLiteQueryBuilder
SQLiteComplexQuery
ComplexQueryHelper

flutesa 04.10.13 в 19:53

0

Виджет ListView получает элементы для списка из:

ListViewProvider
+ ListAdapter
ContentProvider
DataAdapter
ListDataManager

flutesa 04.10.13 в 19:47

0

Почему код не скомпилируется?

public class CustomerDBHelper extends SQLiteOpenHelper {

CustomerDBHelper(Context context) {
super(context, "CustomerDatabase", null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE customers (lastName TEXT);");
}

}

null - недопустимое значение для третьего аргумента в конструкторе родительского класса
SQLiteOpenHelper должен быть SQLiteDBHelper
метод onOpen() не реализован
выполняемый SQL-оператор не допустим
+ метод onUpgrade() не реализован

flutesa 04.10.13 в 19:59

0

При создании и использовании контент-провайдера, какие две части приведённого ниже URI можно пропустить?
content://com.example.transportationprovider/trains/122

A: content://
B: com.example.transportationprovider/
+ C: trains/
+ D: 122

flutesa 04.10.13 в 20:15

0

Как нужно изменить код, чтобы открыть другим приложениям доступ к настройкам данного приложения только для чтения?

SharedPreferences settings = getSharedPreferences("MyPreferencesFileName", Context.MODE_PRIVATE);
SharedPreferences.Editor pe = settings.edit();
pe.putString("MyText", "Hello!");
pe.commit();

Context.MODE_PRIVATE to Context.OTHER_APPS_READABLE
Context.MODE_PRIVATE to Context.MODE_WORLD_READONLY
Context.MODE_PRIVATE to Context.ALL_READABLE
+ Context.MODE_PRIVATE to Context.MODE_WORLD_READABLE
Context.MODE_PRIVATE to Context.MODE_WORLD_WRITEONLY

flutesa 04.10.13 в 20:24

0
+1

Какой тип файла у скомпилированного исходного кода Java, предназначенного для платформы Android?

.cls
.odex
.dalvik
+ .dex
.avm

flutesa 04.10.13 в 20:33

0

Какая утилита командной строки используется для просмотра отладочной информации?

tailer
+ logcat
adblog
traceview
outview

flutesa 04.10.13 в 20:38

0

Какие четыре типа диалогов есть в Android?

Feedback, Progress, DateTimePicker, Input
TextInput, Feedback, DataPicker, Toaster
Message, Progress, DatePicker, TimePicker
Immediate, Deferred, DataReciever, Progress
+ Alert, Progress, DatePicker, TimePicker

flutesa 04.10.13 в 20:39

0

Что происходит в первую очередь при отрисовке макета (layout)?

Computation - расчёт
+ Layout - разметка
Measure - измерение
MeasureSpec - спецификации родительского объекта
Validation - утверждение

flutesa 04.10.13 в 20:48

0

Какая константа должна быть в коде на месте символов XXXXXXXXXX, чтобы принять данные от NFC метки?
public void onResume() {
super.onResume();
if (NfcAdapter.XXXXXXXXXX.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = intent.getParselableArraysExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
}
}
}

ACTION_PAYLOAD_FOUND
ACTION_NFC_NDEF
ACTION_TAG_DISCOVERED
+ ACTION_NDEF_DISCOVERED
EXTRA_NDEF_MESSAGES

flutesa 05.10.13 в 14:59

0
+1

Из-за чего текст в приложении нигде не отобразится? Подразумевается, что код написан корректно, компилируется и запускается на устройстве без ошибок.

MyActivity.java
---------------
package com.example.app;

import android.app.Activity;
import android.os.Bundle;

public class ExampleActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MyDrawView(this));
}

}

MyDrawView.java
---------------
package com.example.all;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class MyDrawView extends View {

public MyDrawView(Context context) {
super(context);
}

protected void onDrawView(Canvas canvas) {
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setTextSize(25);
paint.setAntiAlias(true);
canvas.drawText(""Hello World"", 5, 30, paint);
}

}

+ вместо метода onDrawView() должен быть метод onDraw()
класс MyDrawView должен быть унаследован от SurfaceView
вызов метода setContentView() должен ссылаться на значение в R.java
super.onDraw(canvas) должен вызываться в методе onDrawView()
- в классе MyDrawView нужно реализовать метод onDrawStart()

flutesa 05.10.13 в 15:20

0

Чтобы включить файлы со статическими данными приложения и получить к ним доступ во время выполнения, необходимо:

- поместить файлы в res/data и открыть их с помощью метода openResource(R.raw("<имя-файла>"))
закодировать файлы в base64 и поместить их в res/data
сохранить файлы где-нибудь в проекте и открыть их с помощью метода openStream("<имя_файла_с_путем>")
+ поместить файлы в res/raw и открыть их с помощью метода openRawResource(R.raw.<имя-файла>)
использовать инструмент datafile для кодирования файлов в исходные файлы Java

flutesa 05.10.13 в 15:29

0

Каково назначение данного кода?

<permission-group android:description="@string/groupNetwork"
android:icon="@drawable/networkIcon"
android:label="@string/groupNetworkLabel"
android:name="@string/groupNetwork" />

обеспечивает приложению права доступа к сетевым ресурсам
информирует другие приложения Android, которые могут запускать компоненты, используя разрешение groupNetwork
указывает, что приложение использует разрешение groupNetwork
+ объявляет логическую группу связанных разрешений
объявляет настраиваемое разрешение с именем groupNetwork для обращения по ссылке для других приложений

flutesa 05.10.13 в 15:52

0

"Вы делаете меню приложения. Для этого создали XML-файл mainMenu.xml и поместили его в assets/menu. При попытке создать меню с помощью метода getMenuInflater().inflate(R.menu.mainMenu, viewGroup) меню не создается."
Какие действия следует предпринять, чтобы устранить проблему?

вручную отредактировать файл R.java, добавив в него ссылку на XML-файл
+ переместить файл mainMenu.xml в res/menu
использовать класс MenuFileInflater вместо MenuInflater
использовать метод inflateFromFile() вместо inflate()
передать значение true в качестве второго аргумента метода inflate()

flutesa 05.10.13 в 16:02

0

Что необходимо добавить в код, чтобы гарантировать возвращение фокуса на Button1, после того, как пользователь переместится вниз от Button2?

<LinearLayout android:orientation="vertical">
<Button android:id="@+id/Button1" />
<Button android:id="@+id/Button2" />
</LinearLayout>

android:nextFocusDown = "+id/Button1" к конфигурации Button1
android:nextFocusTop = "+id/Button2" к конфигурации Button1
+ android:nextFocusDown = "+id/Button1" к конфигурации Button2
android:nextFocus = "previousView" к конфигурации Button2
android:nextFocusTop = "+id/Button1" к конфигурации Button2

flutesa 05.10.13 в 16:45

0

Android Virtual Device (AVD) это:

инструмент Eclipse для генерации подходящего целевому устройству APK
веб-средство для демонстрации APK для бета-тестирования пользователями
экземпляр Android SDK для конкретного уровня Android API
+ JVM-образ для отладки приложений для Android на ПК
эмулятор, представляющий конфигурацию конкретного устройства

flutesa 05.10.13 в 17:04

0
+1

Почему вывод будет не корректным?

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.company.app" >
    <uses-sdk android:minSdkVersion="8" />

    <application
        android:icon="@drawable/ic1_launcher"
        android:label="@string/app1_name" >
        <activity android:label="@string/app1_name"
            android:name="com.company.app.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <application
        android:icon="@drawable/ic2_launcher"
        android:label="App#2" >
        <activity android:label="App#2"
            android:name="com.company.app.MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>    
</manifest>

тег <application> может появляться только один раз
указанное пространство имен является не правильным
в AndroidManifest.xml нельзя использовать жестко закодированные строки для значений меток
значение minSdkVersion не является допустимым значением
+ в одном пакете нельзя указать две главные деятельности (MainActivity)

flutesa 05.10.13 в 17:11

0

NinePatchDrawable - это формат растровых изображений, который:

создаётся из девяти отдельных файлов и используется для анимации
сохраняется в формате .9pt и подвергается сжатию
поддаётся растягиванию и ограничен 64-цветовой палитрой
+ поддаётся растягиванию и служит фоном для View
создаётся с помощью инструмента draw9patch и имеет статические размеры

flutesa 05.10.13 в 17:27

0

Почему не отобразилось меню, несмотря на то, что исключение не выбросилось?

public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.mainmenu, menu);
return false;
}

R.menu.mainmenu - не допустимый формат для идентификатора ресурса
действие (Activity), которому принадлежит фрагмент кода, должно наследоваться от MenuActivity
+ метод onCreateOptionsMenu() должен возвращать true
для объекта Menu необходимо вызвать метод commit()
объект MenuInflater - одиночный элемент (singleton) и не должен быть инстанцирован

flutesa 05.10.13 в 17:41

0

"У вас есть длительный процесс, который вы не хотите включать в один поток с обработкой пользовательского интерфейса. Выненсение этого процесса в новый поток целесообразно, но вы не хотите писать весь шаблонный код для работы с потоками."
Какой класс обеспечит нужный для этого функционал?

+ AsyncTask
BackgroundTask
UIWorker
UIThread
Runnable

flutesa 05.10.13 в 17:51

0

Что нужно добавить к фрагменту кода, чтобы намерение (Intent) могло быть передано следующей деятельности (activity)?

Intent i = new Intent(Intent.ACTION_VIEW);
Bundle b = new Bundle();
b.putString("EMAIL", "abc@xyz.com");

i.addExtra(b);
+ i.putExtras(b);
i.putBundle(b);
i.addData(b);
i.passBundle(b);

flutesa 05.10.13 в 18:14

0

Какую строчку нужно вставить вместо комментария, чтобы всплывающее уведомление (Toast) появилось в левом верхнем углу экрана?

Context context = getApplicationContext();
CharSequence text = "Data operation is complete";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
// INSERT CODE HERE
toast.show();

toast.setPosition(Gravity.NONE, 0, 0);
toast.setPosition(Toast.TOP, Toast.LEFT);
+ toast.setGravity(Gravity.TOP | Gravity.LEFT, 0, 0);
toast.setGravity(-1, Toast.TOP, Toast.LEFT);
toast.setPosition(0, 0);

flutesa 05.10.13 в 18:19

0

"У вас есть приложение, опубликованное в Google Play. В манифесте указано maxSdkVersion 5. Пользователи жалуются, что после недавнего обновления Android до версии 2.0.1 (API уровня 6), они уже не могут видеть или использовать ваше приложение."
Какие изменения следует внести, чтобы пользователи смогли использовать приложение снова?

реализовать upgradeApp() метод в классе Activity для основной деятельности
опубликовать новую версию приложения, специально предназначенную для версии Android пользователей
установить maxSdkVersion 6 или выше,или удалить этот элемент полностью из вашего манифеста
добавить тег <upgrade previous="5" new="6" /> в манифест приложения
установить targetSdkVersion 6 или выше, или удалить этот элемент полностью из вашего манифеста

flutesa 05.10.13 в 18:28

0

Необходимо отправить Intent, который будет существовать после того, как его широковещательная передача завершится. Но таким образом, чтобы к его данным можно будет получить доступ. Какой тип Intent нужно использовать?

Accessible
Persistent
Long-lived
+ Sticky
Cohesive

flutesa 05.10.13 в 18:31

0

Как следует изменить фрагмент кода, чтобы он заработал?
WebView myWebView = (WebView)findViewById(R.id.webview);
myWebView.loadUrl("http://www.example.com");

изменить вызов метода loadUrl(), включив true в качестве второго аргумента
вызвать метод myWebView.reload() в конце фрагмента кода
добавить android.permission.ALLOW_WEBVIEW в манифест
+ добавить android.permission.INTERNET в манифест
вызвать метод myWebView.show() в конце фрагмента кода

flutesa 05.10.13 в 20:00

0

Что нужно сделать, чтобы нижеприведённый код успешно сохранил файл с данными?

File file = new File(myContext.getExternalFilesDir(null), "appData.txt");
try {
FileOutputStream os = new FileOutputStream(file, true);
OutputStreamWriter out = new OutputStreamWriter(os);
out.write(data);
out.close();
} catch (e) { }

пустой блок catch должен повторять операцию до успешного завершения
в метод getExternalFilesDir() должно быть передано значение true, вместо null
приложение должно запросить согласие пользователя, путем вызова метода canWriteExternalStorage() перед выполнением данного кода
+ в манифесте приложения должно быть указано android.permission.WRITE_EXTERNAL_STORAGE
данные должны быть преобразованы в объект File

flutesa 05.10.13 в 20:05

0

Предоставляемые платформой Android стили и темы можно получить через:
android.style_themes
R.android.style_themes
android/stlThm
R.styleThemes
+ android.R.style

flutesa 09.10.13 в 11:49

0

На что нужно заменить значения AAA, а BBB, CCC, DDD (строки 6, 8, 9 и 11), чтобы установить mExternalStorageAvailable и mExternalStorageWriteable флаги для точного отображения состояния внешнего устройства хранения?

1: boolean mExternalStorageAvailable = false;
2: boolean mExternalStorageWritable = false;
3: String state = Environment.getExternalStorageState();
4:
5: if (Environment.MEDIA_MOUNTED.equals(state)) {
6: mExternalStorageAvailable = mExternalStorageWritable = AAA;
7: } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
8: mExternalStorageAvailable = BBB;
9: mExternalStorageWritable = AAA;
10: } else {
11: mExternalStorageAvailable = mExternalStorageWritable = DDD;
12: }

false, true, false, true
true, true, false, false
true, false, true, false
false, false, true, true
true, false, false, true

flutesa 05.10.13 в 19:58

0

Мобильные устройства иногда подключаются к удаленным системам через небезопасные сети, например, через публичные Wi-Fi точки доступа. Каким образом можно обезопасить такие подключения?
запустить ProGuard на APK для обеспечения сокрытия сетевой деятельности
+ использовать защищенные протоколы, такие как HTTPs
использовать контент-провайдеры с автоматическим шифрованием доступа к сетевым ресурсам с Android
использовать низкоуровневые Linux network I/O процедуры
переключить устройство на 3G или 4G сеть

flutesa 09.10.13 в 12:13

0

Какая последовательность методов жизненного цикла Activity вызывается в первую очередь?

onCreate, onStart, onRunning
onPreInit, onCreate, onRunning
+ onCreate, onStart, onResume
onCreate, onRestart, onResume
onStart, onInit, onResume

flutesa 09.10.13 в 12:18

0

"Вы должны получить доступ к удаленной системе для получения данных. Удаленная система обеспечивает интерфейс REST веб-интерфейсов. Вы не хотите включить любые дополнительные библиотеки в приложение, кроме предоставляемых Android'ом."
Какой пакет Android SDK содержит классы, которые позволят вам достичь этой цели?

+ org.apache.http
javax.ws.rest
java.net.rest
javax.ws.rs
org.apache.cxf

flutesa 09.10.13 в 12:39

0

Что нужно сделать для обеспечения запуска этой деятельности, после того, как пользователь выполняет поиск в диалоговом поиске или виджет?

// onCreate() method from your searchable Activity class
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
Intent intent = getIntent();
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
String query = intent.getStringExtra(SearchManager.QUERY);
doMySearch(query);
}
}

- добавить поле класса public static boolean SEARCH_ENABLED со значением true
объявить активность этого класса в файле searchable.xml
+ настроить деятельность для обработки ACTION_SEARCH намерения
- вызвать метод makeSearchable() сразу после вызова setContentView()
- убедится, что класс наследуется от SearchableActivity

flutesa 05.10.13 в 19:52

0

Для каких сред разработки Google разрабатывает расширения для Android?

JBuilder
IntelliJ IDEA
Netbeans
Eclipse
Jdeveloper

flutesa 04.10.13 в 20:09

0
Минутку...