Электронная библиотека » Тимур Машнин » » онлайн чтение - страница 7


  • Текст добавлен: 28 декабря 2023, 08:02


Автор книги: Тимур Машнин


Жанр: Компьютеры: прочее, Компьютеры


Возрастные ограничения: +12

сообщить о неприемлемом содержимом

Текущая страница: 7 (всего у книги 25 страниц) [доступный отрывок для чтения: 8 страниц]

Шрифт:
- 100% +

Тест 12

Вопрос 1

Где хранить тяжелые структурированные данные в Android приложении?

Files

Sqlite

Preferences

Не хранить в SQLite, потому что она не приватная для приложения.


Вопрос 2

Почему мы должны создавать и модернизировать базу данных только в SQLiteOpenHelper?

Это является обязательным, чтобы обновлять базу данных только в SQLiteOpenHelper, иначе SQLite будет генерировать ошибку времени компиляции из соображений безопасности.

Потому что SQLiteOpenHelper обеспечивает уверенность, что база данных всегда в актуальном состоянии. Также SQLiteOpenHelper управляет потоками, если более чем один поток пытается получить доступ к базе данных.

Ничего из перечисленного.

Все перечисленное.


Вопрос 3

Как обновить таблицы базы данных?

Передать другой номер версии в возрастающем порядке и поместить весь код модернизации в методе onUpgrade () helper класса.

Передать другой номер версии в возрастающем порядке и поместить весь код модернизации в методе onCreate () helper класса.

Передать другой номер версии в любом порядке и поместить весь код модернизации в методе onUpgrade () helper класса.

Передать другой номер версии в декрементном порядке и поместить весь код модернизации в методе onUpgrade () helper класса.


Вопрос 4

Что является асинхронным (занимает больше времени) создание Helper объекта или получение объекта SQLiteDatabase?

Создание Helper объекта занимает больше времени.

Мы не можем предсказать, иногда создание Helper объекта занимает много времени и иногда получение объекта базы данных может занять некоторое время. Мы не можем угадать, что является асинхронным.

Создание Helper объекта является синхронным и возвращает немедленно, тогда как getWritableDatabase может занять некоторое время, когда вы создаете базу данных впервые. Так что это может занять больше времени (асинхронное создание) впервые или когда мы обновляем базу данных.

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


Вопрос 5

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

Сервис также будет убит.

Сервис будет жив в течение некоторого времени и будет убит Android сборщиком мусора.

Сервис будет работать вечно, никто не сможет остановить его сейчас, и будет утечка памяти.

Сервис будет продолжать работать в фоновом режиме, но это он может остановить себя сам, когда выполнит работу. Или другие компоненты также могут убить его, используя stopService (), или Android может также убить сервис в случае нехватки памяти.


Вопрос 6

Какая функция реализуется в классе bound service?

onCreate ()

onBind () и onUnbind ()

ServiceConnectionListener на клиентской стороне.

Все перечисленное.


Вопрос 7

Как обновить пользовательский интерфейс из сервиса, который имеет потоки?

Создать поток в классе сервиса и иметь непосредственный доступ к компонентам пользовательского интерфейса вашей активности.

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

Использование Intent Service.

Все перечисленное.


Вопрос 8

Как запустить сервис с приоритетом переднего плана?

Сервис всегда работает в фоновом режиме, так как он не имеет пользовательского интерфейса, так что это не возможно.

startService (intent, boolean foreground); передать второй параметр true, чтобы сделать этот сервис с приоритетом переднего плана.

Установить приоритет сервиса в <service> теге в файле манифеста. Если приоритет отличается от 0, тогда сервис будет на переднем плане.

startForeground (int id, Notification notification), используйте эту функцию в оnCreate () вашего сервиса.


Вопрос 9

Мое приложение имеет только сервис, и мой сервис выполняет тяжелую функциональность подключения к Интернету и получения данных, должен ли я создать поток или нет? Если это так, почему?

Да потому что сервис по умолчанию, без каких-либо потоков, использует основной поток.

Да потому что, если сервис и активность работают в одном потоке, это может привести к ANR ошибке.

Нет, вам не нужно создавать поток, потому что сервис создаст фоновый поток, когда кто-то запускает сервис.

Нет необходимости создавать новый поток в сервисе, это не требуется в этом случае. Потому что сервис работает в главном потоке. Так как наше приложение не имеет какой-либо активности, все будет ОК, если запустить сервис в главном потоке.


Вопрос 10

Как передать данные от активности сервису?

Передать данные в putextras намерения и использовать setResult ().

Передать данные в putextras намерения и использовать startService () с этим намерением.

Сохранить данные в общую базу данных и обеспечить доступ к ним как из активности, так и из сервиса.

Все перечисленное.


Вопрос 11

Как получить доступ к прогресс бару из сервиса?

Отправить ProgressBar идентификатор с помощью intent extras и получить доступ к нему в сервисе.

Сделать индикатор как статическую переменную в активности и получить доступ к переменной в сервисе.

Если вы хотите обновить интерфейс в сервисе, вызовите динамически зарегистрированный приемник в активности из сервиса. И обновите пользовательский интерфейс из этого динамического приемника этой активности.

Поместить все элементы управления пользовательского интерфейса в общем классе и получить к нему доступ из всех компонентов.


Вопрос 12

Какие значения возвращает метод onStartCommand () и когда они используются?

START_STICKY – в случае, если Android останавливает наш сервис силой, а затем перезапускает сервис, посылая нулевое намерение.

START_NOT_STICKY – в случае, если Android останавливает наш сервис силой, не перезапуская сервис, пока пользователь сам не перезапустит его.

START_REDELIVER_INTENT – в случае, если Android останавливает наш сервис силой, а затем перезапускает сервис, посылая повторно намерение.

Все перечисленное.


Вопрос 13

Как контролировать состояние подключения bound service?

Используя метод isServiceConnected (), который возвращает истину, если сервис подключен.

Используя метод onServiceDisConnected (), эта функция будет вызываться, если соединение нарушается.

Клиент может опрашивать сервис, доступен он или нет.

Используя класс ServiceConnection.


Вопрос 14

Предположим, мой сервис поддерживает и starting service и binding service, и в настоящее время два клиента запустили мой сервис и один клиент связался с моим сервисом. Через 5 минут клиент, который был связан с моим сервисом, отвязывается, а другой клиент останавливает мой сервис. В настоящее время мой сервис работает в памяти или выведен из памяти?

Сервис умер, но до сих пор в памяти.

Сервис мертв и выведен из памяти.

Сервис по-прежнему жив и в памяти.

Сервис все еще жив, но выведен из памяти.


Вопрос 15

Как реализовать IPC (inter process communication), используя Binder?

1. Создать сервис, реализовать оnCreate (), onBind (), onUnbind (), оnDestroy ()

2. Создать файл. aidl с интерфейсными функциями.

3. Реализовать автоматический генерируемый Binder класс заглушки в сервисе.

4. Возвратить объект этого класса заглушки из onBind ().

1. Создать сервис, реализовать оnCreate (), onBind (), onStartCommand (), onUnbind (), оnDestroy ().

2. Создать файл. aidl с интерфейсными функциями.

3. Реализовать автоматически генерируемый Binder класс заглушки в сервисе.

4. Возвратить объект этого класса заглушки из onStartCommand ().

1. Создать сервис, реализовать оnCreate (), onBind (), onStartCommand (), onUnbind (), оnDestroy ().

2. Создать внутренний класс в классе сервиса, который расширяет класс Binder.

3. Реализовать функции этого внутреннего класса.

4. Возвратить объект этого внутреннего класса из onStartCommand ().

1. Создать сервис, реализовать оnCreate (), onBind (), onUnbind (), оnDestroy ().

2. Создать внутренний класс в классе сервиса, который расширяет класс Binder.

3. Реализовать функции этого внутреннего класса.

4. Возвратить объект этого внутреннего класса из onBind ().


Вопрос 16

Для реализации фоновой функциональности активности, что лучше, запустить сервис или поток?

Вы можете использовать оба, потому что оба будут делать то же самое.

Если фоновая функциональность связана с активностью, использовать поток. Если нет, запустить сервис с потоком в нем.

Имеет ли фоновая функциональность связь с активностью или нет, всегда лучше воспользоваться сервисом с потоком, а не активностью с потоком.

Если вы хотите некоторую фоновую функциональность в активности, используйте поток, нет необходимости в сервисе.


Вопрос 17

Можно ли создать сервис без какого-либо потока?

Да, вы можете иметь сервис, запущенный в главном потоке.

Нет, сервис должен иметь поток, он не может работать в главном потоке.

Да, вы можете иметь сервис, запущенный в главном потоке, только если вы не имеете какой-либо активности в главном потоке.

Поток и сервис не связаны.


Вопрос 18

Что произойдет, если вы запустите сервис без потока, как будет работать тяжелая функциональность?

Ничего не случится, сервис будет работать хорошо.

Может привести к ANR (приложение не отвечает) ошибке.

Может привести к ANR (приложение не отвечает) ошибке, если ваше приложение имеет, по меньшей мере, одну активность, поскольку эта активность будет работать в потоке пользовательского интерфейса.

Может привести к ANR (приложение не отвечает) ошибке, независимо от того, есть ли у вас, по крайней мере, одна активность или нет в вашем приложении.


Вопрос 19

В случае нехватки памяти, если Android закрывает сервис насильно, тогда сервис перезагрузится автоматически или пользователь должен запустить этот сервис?

Сервис не будет перезапущен системой Android.

Пользователь должен перезапустить его снова.

Сервис не будет перезапущен системой Android, если метод onStartCommand () вернет START_NOT_STICKY.

Сервис не будет перезапущен системой Android, если метод onStartCommand () вернет START_STICKY или START_NOT_STICKY.


Вопрос 20

JSON это язык?

Да

Нет

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

Ничего из перечисленного.


Вопрос 21

Какие из следующих являются элементами JSON?

Number, String, Boolean, null, Array, Object.

Number, String, Boolean, Array, Object.

String, Array, Object.

Number, String, null, Array, Object.


Вопрос 22

Как передать данные интернет-серверу из Android приложения?

Если данные небольшие – использовать пространства имен NameValuePairs, если данные большие, использовать XML. XML быстрее, чем JSON, поэтому разбор и загрузка будут быстрее.

Если данные небольшие – использовать пространства имен NameValuePairs, если данные большие, использовать JSON. JSON быстрее, чем XML, поэтому разбор и загрузка будут быстрее.

Если данные небольшие – использовать пространства имен NameValuePairs, если данные большие, использовать XML. XML быстрее, чем JSON, поэтому разбор и загрузка будут быстрее. Многие веб-сайты и сервисы имеют большую поддержку XML по сравнению с JSON.

Если данные небольшие – использовать пространства имен NameValuePairs, если данные большие, использовать JSON. JSON быстрее, чем XML, поэтому разбор и загрузка будут быстрее. Многие веб-сайты и сервисы, включая Twitter, facebook, Google, LinkedIn использует JSON, а не XML.


Вопрос 23

Что из следующего верно о коде состояния HTTP ответа, приходящего от сервера к Android приложению?

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

Если код состояния> 400, то это означает успешное выполнение на стороне сервера.

Если код состояния <= 400, то это означает успешное выполнение на стороне сервера.


Вопрос 24

Что произойдет, если код HTTP-соединения будет написан в главном потоке активности?

Это может привести к ANR.

Это не даст никакой ошибки, но может привести к ANR до 2.3 версии. Но начиная с 3,0 это является обязательным, чтобы все сетевые соединения производились в отдельном потоке. Иначе во время выполнения будет исключение NetworkOnMainThreadException.

Код будет отлично работать. Ошибки не будет.

Если мы не будем использовать отдельный фоновый поток, начиная с версии 3.0, система будет бросать исключение времени выполнения.


Вопрос 25

Для подключения к сети Android приложения, какой из следующих вариантов я должен использовать?

DefaultHTTPClient

DefaultHTTPClient или AndroidHttpClient

HttpURLConnection. Это более легковесный вариант, так что используйте его всегда.

До Froyo (2.2) лучше использовать вариант DefaultHTTPClient или AndroidHttpClient, но после него лучше использовать HttpURLConnection.


Вопрос 26

Как войти в Gmail аккаунт из Android приложения с помощью HTTP запроса?

DefaultHttpClient client = new DefaultHttpClient ();

HttpPost post = new HttpPost (»http://mail.google.com/");

List <NameValuePair> params = new ArrayList <NameValuePair> (3);

params. add (new BasicNameValuePair («Email», "[email protected]»));

params. add (new BasicNameValuePair («Passwd», «password here»));

params. add (new BasicNameValuePair («signIn», «Sign in»));

post. setEntity (new UrlEncodedFormEntity (params));

HttpResponse res = client. execute (post);

if (res. getStatusLine ().getStatusCode () <400)

//success

else

//fail

//////////////////////////////////////////////////////////////////////////////////////////////

DefaultHttpClient client = new DefaultHttpClient ();

HttpPost post = new HttpPost (»http://mail.google.com/");

List <NameValuePair> params = new ArrayList <NameValuePair> (3);

params. add (new BasicNameValuePair («Email», "[email protected]»));

params. add (new BasicNameValuePair («Passwd», «password here»));

post. setEntity (new UrlEncodedFormEntity (params));

HttpResponse res = client. execute (post);

if (res. getStatusLine ().getStatusCode () <400)

//success

else

//fail

/////////////////////////////////////////////////////////////////////////////////////////

DefaultHttpClient client = new DefaultHttpClient ();

HttpPost post = new HttpPost (»http://mail.google.com/");

List <NameValuePair> params = new ArrayList <NameValuePair> (3);

params. add (new BasicNameValuePair («Email», "[email protected]»));

params. add (new BasicNameValuePair («Passwd», «password here»));

post. setEntity (new UrlEncodedFormEntity (params));

HttpResponse res = client. execute (post);

if (res. getStatusLine ().getStatusCode ()> = 400)

//success

else

//fail

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

DefaultHttpClient client = new DefaultHttpClient ();

HttpPost post = new HttpPost (»http://mail.google.com/");

List <NameValuePair> params = new ArrayList <NameValuePair> (3);

params. add (new BasicNameValuePair («Email», "[email protected]»));

params. add (new BasicNameValuePair («Passwd», «password here»));

params. add (new BasicNameValuePair («signIn», «Sign in»));

post. setEntity (new UrlEncodedFormEntity (params));

HttpResponse res = client. execute (post);

if (res. getStatusLine ().getStatusCode ()> = 400)

//success

else

//fail


Вопрос 27

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

SOAP быстрее, чем REST для передачи данных.

JSON быстрее, чем XML, XML быстрее, чем SOAP.

JSON быстрее, чем XML, XML быстрее, чем SOAP. Но если мы хотим использовать SOAP в мобильных приложениях, мы можем использовать KSOAP, который разработан для встраиваемых устройств и который быстрее.

Ничего из перечисленного.


Вопрос 28

Какие исключения могут быть брошены во время разбора JSON ответа от сервера в Android приложении?

IOException

JSONException

JSONParsingException

IOError


Вопрос 29

Какие из следующих объектов будут использоваться при разборе JSON файла.

JSONObject

JSONArray

JSONString

JSONUnion


Вопрос 30

Как узнать количество элементов в JSONArray?

Использовать функцию length ().

Использовать переменную length, которая будет содержать количество элементов в этом массиве.

Поместить бесконечный цикл, чтобы прочитать JSONArray, библиотека JSON будет автоматически обнаруживать конец массива.

Ничего из перечисленного.


Вопрос 31

Что такое GCM?

Google Cloud Messaging это сервис, который позволяет мобильным устройствам отправлять текстовые сообщения на другие мобильные устройства.

Google Cloud Messaging для chrome (GCM) является сервисом для зарегистрированных пользователей Chrome, который помогает разработчикам отправить данные в сообщении с серверов для их Chrome приложений и расширений. Сервис предназначен для связи с приложениями или расширениями, и/или уведомлений пользователя. Например, обновления календаря могут быть переданы пользователю, даже если приложение календаря не является открытым.

Google Cloud Messaging для Android (GCM) является сервисом, который позволяет отправлять данные с вашего сервера для пользователя Android-устройства, а также получать сообщения от устройства с помощью такого же соединения.

Ничего из перечисленного.


Вопрос 32

При подключении к серверу Google Android приложения, какие исключения необходимо обрабатывать?

ClientProtocolException, IOException, UnsupportedEncodingException, XmlPullParserException.

ClientException, IOException, UnsupportedEncodingException, XmlPullParserException.

ClientProtocolException, IOError, UnsupportedEncodingException, XmlPullParserException.

ClientProtocolException, IOError, UnsupportedEncodingException.


Вопрос 33

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

finish ()

finishActivity ()

onDestroy ()


Вопрос 34

Что из следующего верно о Android-Asset Packaging Tool (AAPT)?

Автоматически генерирует идентификатор для ресурсных файлов в папке asset.

Создает Android байткод из class файла.

Этот инструмент необходим при использовании внешних библиотек.

Может создать новые zip совместимые архивные файлы.


Вопрос 35

В чем разница между margin и padding в Android?

Margin определяет дополнительное пространство для всех четырех сторон представления. Margin пространство, как правило, за границами представления. Чтобы оставить пространство на левой стороне, использовать android:layout_marginLeft, чтобы оставить пространство на других сторонах, использовать android:layout_marginRight, android:layout_marginTop, android:layout_marginBottom.

Padding используется, чтобы содержимое представления имело отступ в пикселях. Используйте android:padding

android:paddingBottom

android:paddingLeft

android:paddingRight

android:paddingTop, чтобы установить отступы от различных сторон для содержимого представления.

Margin это отступ для содержимого представления, и padding является пространством за границами представления.

Все перечисленное.


Вопрос 36

Как достичь цельности Android приложения. В чем смысл цельности?

При обработке onSaveInstanceState, цельность означает непрерывный поток приложения.

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

При обработке нехватки памяти, цельность означает непрерывный поток приложения.

Все перечисленное.


Вопрос 37

Что флаг FLAG_ACTIVITY_NEW_TASK делает в следующем коде?

Intent in = new Intent ();

in. setAction («com. android. myproject. MYACTION»);

in. setFlags (Intent. FLAG_ACTIVITY_NEW_TASK);

startActivity (in);

Варианты:

Запускает новую активность, соответствующую фильтру намерений, всегда в новой задаче.

Запускает новую активность, соответствующую фильтру намерений, в новой задаче, если соответствующая задача не находится в памяти в настоящее время.

Запускает новую активность, соответствующую фильтру намерений, всегда в старой задаче. Здесь старая задача означает задачу, в которой работает текущая активность, которая запустила новую активность.

Запускает новую активность в новой задаче, где только эта активность будет в этой задаче и никаких-либо других компонентов. Все новые компоненты будут запускаться из новой активности в другой задаче.


Вопрос 38

Что флаг FLAG_ACTIVITY_SINGLE_INSTANCE делает в следующем коде?

Intent in = new Intent ();

in. setAction («com. android. myproject. MYACTION»);

in. setFlags (Intent. FLAG_ACTIVITY_SINGLE_INSTANCE);

startActivity (in);

Варианты:

Запускает новую активность, соответствующую фильтру намерений, всегда в новой задаче.

Запускает новую активность, соответствующую фильтру намерений, в новой задаче, если соответствующая задача не находится в памяти в настоящее время.

Запускает новую активность, соответствующую фильтру намерений, всегда в старой задаче. Здесь старая задача означает задачу, в которой работает текущая активность, которая запустила новую активность.

Запускает новую активность в новой задаче, где только эта активность будет в этой задаче и никаких-либо других компонентов. Все новые компоненты будут запускаться из новой активности в другой задаче.


Вопрос 39

Что из следующего является непрямым под-классом класса Activity?

ActionBarActivity

LauncherActivity

PreferenceActivity

TabActivity

Все перечисленное.


Вопрос 40

Что выполняет ActivityManager в Android?

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

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

Все перечисленное.


Вопрос 41

Что такое анимация активности в Android?

Проигрывать анимацию в активности называется анимацией активности.

Применение анимации перемещения и масштабирования при переходе от одной активности к другой активности называется анимацией активности, чтобы сделать вид, как будто они скользят и масштабируются.

Все перечисленное.


Вопрос 42

Что представляет собой activity transition animation в Android? Как сделать activity transition animation?

Transition это механизм для автоматической анимации изменений, которые происходят, когда новая сцена вводится.

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

Пример кода:

Перейти к resources -> anim папка -> создать opening_trans. xml

<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate android:fromXDelta=«100%»

android:toXDelta=«0%»

android:duration="@android:integer/config_mediumAnimTime» />

</set>


Перейти к resources-> anim папка-> создать closing_scale. xml

<set xmlns:android="http://schemas.android.com/apk/res/android">

<scale android:fromXScale=«80%p»

android:toXScale=«100%p»

android:fromYScale=«80%p»

android:toYScale=«100%p»

android:pivotX=«50%p»

android:pivotY=«50%p» android:duration="@android:integer/config_mediumAnimTime» />


<alpha android:fromAlpha=«0.5»

android:toAlpha=«1.0»

android:duration="@android:integer/config_mediumAnimTime»/>

</set>


Перейти к активности

@Override

protected void onCreate (Bundle savedInstanceState)

{

super. onCreate (savedInstanceState);

//apply opening animation

overridePendingTransition (R. anim. opening_trans, R. anim. closing_scale);

}


Все перечисленное.


Вопрос 43

Как скрыть клавиатуру в Android?

Программно можно закрыть виртуальную клавиатуру с помощью следующего кода:

InputMethodManager inputManager = (InputMethodManager)

this. getSystemService (Context. INPUT_METHOD_SERVICE);

inputManager. hideSoftInputFromWindow (this. getCurrentFocus ().getWindowToken (),

InputMethodManager. HIDE_NOT_ALWAYS);

Программно можно закрыть виртуальную клавиатуру с помощью следующего кода:

getWindow ().setSoftInputMode (WindowManager. LayoutParams. SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Если это не делать посредством программирования, пользователь может скрыть виртуальную клавиатуру с помощью жеста сверху вниз очень быстро. Многие из виртуальных клавиатур поддерживают эту операцию, чтобы скрыться.

Все перечисленное.


Вопрос 44

Какие размеры экрана доступны или поддерживаются в Android?

Android поддерживает 4 варианта размеров экрана: small, normal, large, extra large.

Экраны xlarge по меньшей мере 960dp x 720dp, large экраны по меньшей мере 640dp x 480dp, normal экраны по меньшей мере 470dp x 320dp, small экраны по меньшей мере 426dp x 320dp.

Все перечисленное.


Вопрос 45

Как получить разницу между двумя датами в Android?

Предположим, что есть две даты D1 и D2.

long dif_dates = d1.getTime () – d2.getTime ();

long secs = dif_dates / 1000;

long mins = secs / 60;

long hours = mins / 60;

long days = hours / 24;


Предположим, что у вас есть две даты secondDate и firstDate.

long dateDif = secondDate. getTime () – firstDate. getTime ();

long difference = TimeUnit. MILLISECONDS. toSeconds (dateDif);


Все перечисленное.


Вопрос 46

Каждое приложение имеет по умолчанию один поток. Правда это или ложь?

Ложь, по умолчанию, нет ни одного потока, доступного для данного приложения.

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

Правда, но это не всегда. Иногда приложение может не иметь поток.


Вопрос 47

Что такое ANR (application not responding)? Что является причиной этой проблемы и какое решение этой проблемы?


ANR будет происходить, если мы выполняем какие-либо тяжелые операции в UI главном потоке. Если две тяжелые функциональности произойдут в одном потоке, это приведет к задержке ответа на действия пользователя, что может раздражать пользователя, и, следовательно, остановить весь процесс.

Решение – запускать только компоненты пользовательского интерфейса в основном потоке.

ANR будет происходить, если мы запускаем UI в другом рабочем потоке. Так как другие потоки не должны иметь доступ к интерфейсу, это может закрыть приложение.

Решение – не касайтесь компонентов пользовательского интерфейса из других потоков, из не основного потока.

ANR будет происходить, если мы выполняем какие-либо тяжелые операции с UI в единственном главном потоке. Если две тяжелые функциональности произойдут в одном потоке, это закроет интерфейс, потому что поток может выполнять одну функциональность.

Решение – запускать только компоненты пользовательского интерфейса в основном потоке.

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

Решение – никогда не выполняйте две тяжелые функциональности в вашем приложении одновременно.


Вопрос 48

Если у меня есть приложение с активностью, сервисом и ContentProvider. Когда я запускаю эту программу, сколько процессов и потоков будет создано? Можно ли запустить эти компоненты в более чем одном процессе?

Один процесс, один поток. Да, это возможно, чтобы работать в более чем одном процессе.

Один процесс, один поток, одно приложение может иметь только один процесс.

Процесс не связан с приложением.


Вопрос 49

Можно ли отправить сообщение из потока-а в поток-б, если поток-б не подготовил свой Looper?

Да коммуникация между потоками возможна без Looper.

Если поток-а хочет отправить сообщение в поток-б, тогда Looper потока-б должен быть подготовлен, чтобы получить сообщение, отправленное другими.

Если поток-а хочет отправить сообщение в поток-б, тогда Looper потока-а должен быть подготовлен, чтобы отправить сообщение потоку-б.

Если поток-а хочет отправить сообщение в поток-б, тогда Looper потока-б должен быть подготовлен, чтобы получить сообщение, отправленное другими. Также возможно с помощью HandlerThread создавать межпоточную коммуникацию.


Вопрос 50

Как обновить пользовательский интерфейс из других потоков, кроме основного потока?

Это не возможно для других потоков манипулировать интерфейсом.

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

Запросить основной поток через коммуникацию между потоками с использованием Handler или функции runOnUiThread, и манипулировать UI.

Держать UI компоненты, которые должны быть общими, в общей памяти, и позволить всем потокам манипулировать ими.


Страницы книги >> Предыдущая | 1 2 3 4 5 6 7 8 | Следующая
  • 0 Оценок: 0

Правообладателям!

Данное произведение размещено по согласованию с ООО "ЛитРес" (20% исходного текста). Если размещение книги нарушает чьи-либо права, то сообщите об этом.

Читателям!

Оплатили, но не знаете что делать дальше?


Популярные книги за неделю


Рекомендации